在制作视图控制器新细节视图控制器时,我无法访问我的IBOutlets

时间:2012-11-01 13:26:31

标签: objective-c ios uisplitviewcontroller iboutlet

我有一个iPad主 - 细节,其中主要细节控制器是导航控制器,并且根据所选的表格行(在主视图控制器中),我可能会或可能不会替换由细节导航控制器管理的视图控制器。

这似乎工作正常,只是在进行此移动时我无法访问新的详细信息视图控制器的IBOutlets。

这是我切换导航控制器的视图控制器:

CustomerDetailViewController *subview = [[CustomerDetailViewController alloc] initWithNibName:@"CustomerDetailViewController" bundle:nil];            
[subview setTitle:@"Testing"];
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
app.splitViewController.delegate = subview;
[app.detailNavigationController setViewControllers:[NSArray arrayWithObjects:subview, nil]];
[subview setData:[custData objectForKey:@"name"]];

custData是一个包含我的视图信息的NSDictionary。这是setData命令:

- (void)setData:(NSDictionary *)cust {

    NSLog(@"%@\n", [cust valueForKey:@"name"]);
    self.nameLabel.text = [cust valueForKey:@"name"];
    NSLog(@"%@\n", self.nameLabel.text);
}

所以会发生什么,subview成为新的视图控制器,但标签不会被更改 - 但是,这两个日志命令被执行。标签是使用IB合成和连接的,如果我将子视图作为新的视图控制器而不是替换它,则可以正常工作。

1 个答案:

答案 0 :(得分:1)

我会说,视图尚未初始化。首先在viewDidLoad方法中连接出口。尝试在viewDidLoad中添加一个日志语句来查找,首先调用哪一个。

如果在viewDidLoad方法之后调用setData,则只能设置CustomerDetailViewController的局部变量,然后由viewDidLoad读取,并相应地设置标签