根视图控制器偶尔会丢失

时间:2014-09-04 03:48:19

标签: ios ios7

我的应用程序每隔一段时间启动一次黑屏,并发出以下警告:

Application windows are expected to have a root view controller at the end of application launch

我使用故事板。当我编译应用程序时,这往往会随机发生,如果我对代码和/或故事板进行更改然后重新编译,则错误往往会消失。 即使重新启动,错误的编译也会继续启动应用程序处于错误状态。

关于应用程序本身唯一不寻常的(对我而言)是它的初始视图包含一个地图视图,在其顶部有多个容器视图(在启动时隐藏)。

我尝试使用Spark Inspector来调试视图层次结构,并且它显示唯一的元素是UIWindow,根本没有加载UIViews。

这是我的didFinishLaunchingWithOptions(这是app代理中唯一有代码的方法),就像Matt所要求的那样:

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [DDLog addLogger:[DDASLLogger sharedInstance]];
    [DDLog addLogger:[DDTTYLogger sharedInstance]];
    [[DDTTYLogger sharedInstance] setColorsEnabled:YES];
    UIColor *pink = [UIColor colorWithRed:(118 / 255.0)
                                    green:(214 / 255.0)
                                     blue:(84 / 255.0)
                                    alpha:1.0];
    [[DDTTYLogger sharedInstance] setForegroundColor:pink
                                     backgroundColor:nil
                                             forFlag:LOG_FLAG_INFO];

    #ifdef DEBUG
        DDLogInfo(@"Launching in debug mode");
    #else
        DDLogWarn(@"Launching in release mode");
    #endif

    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
    [[AFNetworkActivityLogger sharedLogger] startLogging];

    [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil]
        setFont:[UIFont fontWithName:@"OpenSans" size:14]];

    NSMutableDictionary *titleBarAttributes = [NSMutableDictionary
        dictionaryWithDictionary:
            [[UINavigationBar appearance] titleTextAttributes]];
    [titleBarAttributes setValue:[UIFont fontWithName:@"OpenSans" size:18]
                          forKey:NSFontAttributeName];
    [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes];

    return YES;
}

2 个答案:

答案 0 :(得分:1)

如果您使用的是故事板,则可以从故事板中设置根视图控制器 enter image description here

否则,您必须在AppDelegate

中以编程方式创建它
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UINavigationController *rootViewController = [[UINavigationController alloc] initWithNibName:@"RootVC" bundle:nil];
    self.window.rootViewController = rootViewController;
    [self.window makeKeyAndVisible];
    return YES;
}

答案 1 :(得分:0)

你的应用程序中没有任何内容:didFinishLaunchingWithOptions看起来会搞砸窗口的根视图控制器。故事板是否在Info.plist中为UIMainStoryboardFile键设置?故事板中的视图控制器应该是检查器中设置的根视图控制器,应该检查"是初始视图控制器"复选框。您应该看到一个灰色箭头指向故事板中的根视图控制器。