IBOutlet instances are (null) after loading from NIB

前端 未结 5 1983
太阳男子
太阳男子 2021-02-18 22:30

I am working on an iPhone app and am getting (null) references to IBOutlet fields in my controller. I have a UIViewController subclass that is set as the File\'s Owner in my XIB

5条回答
  •  萌比男神i
    2021-02-18 22:43

    This is the solution.

    The IBOutlets aren't ready to use until the view controller finishes loading.

    For example, if you want to set a UILabels text property, you would need to set a NSString on your controller first, and then set the labels text property in somewhere like viewDidLoad.

    So in your firstViewController.m : (This is for storyboards, but same idea applies)

    - (void)buttonPress:(id)sender {
       [self performSegueWithIdentifier:@"mySegue" sender:self];
    }
    
    - (void)prepareForSegue(UIStoryboardSegue *)segue sender:(id)sender {
       SecondViewController *secondViewController = [segue destinationViewController];
       secondViewController.stringForLabel = @"My Label String";
    }
    

    Then in the .h of your secondViewController:

    @property (strong, nonatomic) IBOutlet UILabel *label;
    @property (strong, nonatomic) NSString *stringForLabel;
    

    Then we set the text property on the UILabel, in the viewDidLoad of secondViewController.m. By this stage, the IBOutlet has been created and is ready to go.

    - (void)viewDidLoad {
       [super viewDidLoad];
       self.label.text = self.stringForLabel;
    }
    

提交回复
热议问题