0

我有一个 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);
}

所以发生的事情是,子视图成为新的视图控制器,但标签没有改变 - 但是,这两个日志命令被执行。标签是使用 IB 合成和连接的,如果我将子视图推送为新的视图控制器而不是替换它,则该标签可以工作。

4

1 回答 1

1

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

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

于 2012-11-01T13:29:51.247 回答