我遇到了问题。
当我初始化Controller时,我使用了initwithnib:bundle:
方法然后我认为这个控制器已经加载到内存中。所以我调用它的方法selectUnreadMessage
来改变它的标题。但我发现在viewdidload
之后调用selectUnreadMessage
。
有人可以告诉我为什么?感谢。
- (void)selectUnreadSegmentedHeaderButton {
if ([YDNetworkingManager sharedNetworkingManager].badgeNumbers.count) {
for (NSNumber *unreadMessagesCount in [YDNetworkingManager sharedNetworkingManager].badgeNumbers) {
if (unreadMessagesCount.intValue > 0) {
NSInteger index = [[YDNetworkingManager sharedNetworkingManager].badgeNumbers indexOfObject:unreadMessagesCount];
self.segmentedHeader.selectedIndex = index;
[self loadTableViewAtIndex:index];
break;
}
}
}
}
我的私有方法的代码在上面。此控制器具有SegmentedHeader属性,可在不同类型的消息之间切换。
此方法在使用此方法作为addSubView;
的Controller之后调用答案 0 :(得分:0)
viewDidLoad
进入另一个视图时,会调用 addSubView
方法。添加Controller视图后,将调用viewWillAppear
和viewDidAppear
。如果从超级视图中删除了Controller的视图,则会调用viewWillDisAppear
和viewDidDisAppear
。
再次添加Controller的视图,viewDidLoad
将 NOT 被调用。其他方法的说法与我所说的相同。
这意味着当您初始化Controller时,不会立即调用viewDidLoad
。稍后将调用此方法。它是延迟加载
希望它有用!
答案 1 :(得分:0)
ViewController初始化没有创建视图 - viewcontroller的视图是懒惰加载的 - 当它的视图实际上被添加到视图层次结构时。因此,当您访问viewcontroller的-viewDidLoad
属性时会调用.view
方法 - 因此,您可以考虑在init方法中初始化数据结构(获取数据,分配容器,设置默认值等)以及稍后,当调用-viewDidLoad
时 - 将数据应用于您的视图/ UI。