Objective c 在使视图控制器成为新的详图视图控制器时,我无法访问我的IBOutlet

Objective c 在使视图控制器成为新的详图视图控制器时,我无法访问我的IBOutlet,objective-c,ios,uisplitviewcontroller,iboutlet,Objective C,Ios,Uisplitviewcontroller,Iboutlet,我有一个iPad主详细信息,其中主详细信息控制器是一个导航控制器,根据所选的表行(主视图控制器中),我可以或不可以替换由详细信息导航控制器管理的视图控制器 这似乎工作得很好,只是在进行此移动时,我无法访问新的详细视图控制器的IBOutlet 下面是我切换导航控制器的视图控制器: CustomerDetailViewController *subview = [[CustomerDetailViewController alloc] initWithNibName:@"CustomerDetail

我有一个iPad主详细信息,其中主详细信息控制器是一个导航控制器,根据所选的表行(主视图控制器中),我可以或不可以替换由详细信息导航控制器管理的视图控制器

这似乎工作得很好,只是在进行此移动时,我无法访问新的详细视图控制器的IBOutlet

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

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合成和连接的,如果我将子视图作为一个新的视图控制器推送而不是替换它,它就会工作。

我想说,视图尚未初始化。首先使用
viewDidLoad
方法连接插座。尝试在
viewDidLoad
中放入一条log语句,以找出哪个语句首先被调用


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

您是正确的-viewDidLoad发生在setData之后。但是,我在调用setData之前初始化该视图,并在调用setData之前将其指定为我的detailViewController。你知道什么时候可以加载视图吗?另外-标题设置正确,如navigationViewController上所示。在任何情况下-我已将
NSDictionary*cust
设置为实例变量,使用自定义init进行设置,并根据您的建议在
viewDidLoad
中设置标签,一切正常。干杯。我想视图控制器的标题处理方式与其他UI元素不同,如
UILabel
s等。视图控制器的实例化也与视图的加载分离(本质上是其他内容,请参见MVC模式)是的,我认为构造函数名
initWithNibName
——因为nib本质上就是视图——把我弄糊涂了,以为您是在用视图同时初始化控制器,但我猜
initWithNibName
只是在逻辑上把两者联系在一起,实际上并没有初始化视图。