ViewDidLoad 调用了两次

Posted

技术标签:

【中文标题】ViewDidLoad 调用了两次【英文标题】:ViewDidLoad Called two times 【发布时间】:2015-10-17 20:36:09 【问题描述】:

用户成功登录后我的应用程序。我会调用 HOME 通知,之后在 HomeViewController 中调用 ViewDidLoad 两次。有人可以帮忙吗?

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
          
        //-- Notification Observer
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(HomeNotification:)name:@"HOME"object:nil];

        return YES;
    

    #pragma mark - Sidemenu & Home
    - (void)HomeNotification:(NSNotification *) notification
    
        UIStoryboard *sideMenuSB = [UIStoryboard storyboardWithName:SB_SideMenu bundle:[NSBundle mainBundle]];
        SideMenuViewCntrl *sideMenuVC = [sideMenuSB instantiateViewControllerWithIdentifier:VC_SideMenu];

        UIStoryboard *HomeSB = [UIStoryboard storyboardWithName:SB_Home bundle:[NSBundle mainBundle]];
        HomeViewController *homeVC = [HomeSB instantiateViewControllerWithIdentifier:VC_Home];
        UINavigationController *navigationController = [HomeSB instantiateViewControllerWithIdentifier:@"navigationController"];

        MFSideMenuContainerViewController *container = nil;
        if ([[notification name] isEqualToString:@"HOME"])
        
            container = [MFSideMenuContainerViewController containerWithCenterViewController:homeVC leftMenuViewController:sideMenuVC rightMenuViewController:nil];
        

 Adding view to window will call viewdidload multiple times?
        [container setLeftMenuViewController:sideMenuVC];
        [container setCenterViewController:navigationController];
        self.window.backgroundColor = [UIColor blackColor];
        self.window.rootViewController = container;
        [self.window makeKeyAndVisible];
    

【问题讨论】:

您可能正在创建 2 个 HomeViewController 实例。第二个可以通过侧边菜单或导航创建。此外,当您在 HomeScreenViewController 的 viewDidLoad 中放置断点并在控制台中“po self”时,您会得到什么?您是否两次得到相同的描述? 是的。我得到这个两次。如何解决这个问题? 【参考方案1】:

我在 SideMenu 容器中添加了两次 Home 和侧边菜单视图控制器。

container = [MFSideMenuContainerViewController containerWithCenterViewController:homeVC leftMenuViewController:sideMenuVC rightMenuViewController:nil];

一旦我删除了下面的代码,它现在可以正常工作了......

[container setLeftMenuViewController:sideMenuVC];
[container setCenterViewController:navigationController];

【讨论】:

以上是关于ViewDidLoad 调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4 - viewDidLoad 问题

NSNotificationCenter 通知在滑动时触发了两次

我的背景音乐播放了两次(同时)

didUpdateToLocation 调用了两次,好的。为啥 oldLocation 两次都为零?

didRegisterUserNotificationSettings 被调用了两次?

ListSelectionListener 调用了两次