从window.rootViewController呈现

时间:2014-08-25 22:48:52

标签: ios objective-c ios7 uiviewcontroller ios8

在我的应用中,我在willFinishLaunching中设置了窗口的rootViewController。标准。

didFinishLaunching中,我检查用户是否已登录,如果没有,我会提供一个LoginViewController。

- (BOOL)application:(UIApplication *)application willFinishLaunching...
{
    ...

    self.window.rootViewController = [MyViewController new];
    [self.window makeKeyAndVisible];

    ...

    return true;
}

- (BOOL)application:(UIApplication *)application didFinishLaunching...
{
    if (/* not logged in */) {
        UIViewController *login = [LoginViewController new];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:welcome];
        [self.window.rootViewController presentViewController:nav animated:false completion:nil];
    }

    return true;
}

在iOS 7中,这非常有效。但是,在iOS 8中,我在控制台中看到以下警告:

Unbalanced calls to begin/end appearance transitions for <LoginViewController: 0x7fca9340cbb0>.

我还不太确定在能够展示我的LoginViewController时我需要做些什么才能避免此警告。

我喜欢来自window.rootViewController,因为它允许我在用户登录时解除LoginViewController,而不必将完成/回调代码添加到我的应用程序中的任何其他视图控制器。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要为视图控制器提供一些延迟。我在我的一个项目中使用了这个技巧。

var a = moment("12 24 1995").format('DD MM YYYY');
alert(a) 

使用带延迟的performSelector调用此方法

-(void)presentController
{
        UIViewController *login = [LoginViewController new];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:welcome];
        [self.window.rootViewController presentViewController:nav animated:false completion:nil];
}