我正在开发一个iPhone应用程序,在我的控制器中获取到了IBOutlet字段的(null)引用。 我有一个UIViewController子类,它被设置为我的XIB文件的所有者。 我有一组UI元素被链接到控制器。 从NIB加载并尝试在这些UI元素上设置属性后,我发现它们是(null)。下面是一些代码以澄清:
ExpandSearchPageController.h:
@interface ExpandSearchPageController : UIViewController
{
IBOutlet UITextView * completeMessageView;
}
-(void)checkTextField;
@property (nonatomic, retain) IBOutlet UITextView * completeMessageView;
ExpandSearchPageController.m:
@implementation ExpandSearchPageController
@synthesize completeMessageView;
-(void)checkTextField
{
NSLog(@"text field: %@",completeMessageView);
}
ExpandSearchPageController被设置为ExpandSearchPage.xib的File's Owner。ExpandSearchPage.xib的UITextView与completeMessageView连接。当我调用
ExpandSearchPageController * searchExpanderPage = [[ExpandSearchPageController alloc] initWithNibName:@"ExpandSearchPage" bundle:[NSBundle mainBundle]];
[searchExpanderPage checkTextField];
结果为
"text field: (null)"
presentViewController:animated:completion:
模态呈现视图控制器时,直到视图出现(正如你所发现的那样),所有的 IBOutlets 都将为 nil。因此,您需要通过完成块访问它们,在模态上调用viewDidAppear
时会调用该块。 - abc123