0

我有问题。

当我初始化一个控制器时,我使用了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之后调用;

4

2 回答 2

0

ViewController 初始化不是创建视图 - viewcontroller 的视图是延迟加载的 - 当它的视图实际添加到视图层次结构中时。因此,-viewDidLoad当您访问 viewcontroller 的.view属性时,方法会被调用 - 因此,您可以考虑在 init 方法中初始化您的数据结构(获取数据、分配容器、设置默认值等),然后在-viewDidLoad调用时 - 将您的数据应用到您的视图/用户界面。

于 2013-06-25T05:40:17.067 回答
0

viewDidLoad当控制器的视图准备addSubView进入另一个视图时调用方法。并且当添加控制器视图时,viewWillAppearviewDidAppear被调用。如果 Controller 的视图从 superview 中删除,viewWillDisAppear并且viewDidDisAppear将被调用。

并且再次添加了Controller的视图,viewDidLoad不会被调用。其他方法将与我所说的相同。

这意味着当您初始化控制器时,viewDidLoad不会立即调用。稍后将调用此方法。这是延迟加载

希望有用!

于 2013-06-25T02:41:10.530 回答