'因未捕获的异常而终止应用'..它找不到MainWindow,它已不存在

时间:2011-06-17 12:53:10

标签: iphone objective-c xcode

我刚刚删除了所有.xib文件,最近更改了我的标识符。现在它开始给我这个错误:

  

因未捕获而终止应用   例外   'NSInternalInconsistencyException',   原因:'无法在捆绑中加载NIB:   “一个NSBundle    (加载)'有名字   '主窗口'“

MainWindow不久前被删除了,从部署信息中删除MainWindow意味着我只是给了一个黑屏。这是我在app appate中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    [window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

我错过了什么吗?我认为我应该删除MainWindow,但正如我所说,这只是给我一个黑屏。

1 个答案:

答案 0 :(得分:6)

您收到此错误是因为NSMainNibFile中设置了Info.plist值。它告诉操作系统在启动时打开NIB文件。由于您因某种原因忘记了NIB,因此您必须通过删除NIB文件填写您创建的漏洞。

  1. 您必须从Info.plist
  2. 中删除密钥
  3. 您必须在main.m中进行一些更改。通常MainWindow.xib包含有关您的应用程序委托的信息,但现在您需要提供它。找到标有int retVal = UIApplicationMain(argc, argv, nil, nil);的行,并将其替换为int retVal = UIApplicationMain(argc, argv, nil, @"yourDelegateClassName");

  4. 到目前为止您所做的事情将实例化应用程序委托,而application:didFinishLaunchingWithOptions:将被调用,但window尚未设置,因为它由{{NIB处理。 1}}再次归档。这将适用于您的所有商店。不仅是你的“窗口。

  5. 您必须对application:didFinishLaunchingWithOptions:方法添加一些此类内容,

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
        // Instantiate Window
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    
        // Instantiate Root view controller
        RootViewController * viewController = [[[RootViewController alloc] init] autorelease];
    
        // Instantiate navigation controller
        navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
    
        [application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
        [window addSubview:navigationController.view];
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    

    上述方法只是一个模板,必须根据您的要求进行修改。