我不久前删除了所有 .xib 文件,并且最近更改了我的标识符。现在它开始给我这个错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle (loaded)' with name 'MainWindow''
MainWindow 不久前被删除,从部署信息中删除 MainWindow 意味着我只会看到黑屏。这是我的应用程序委托(delegate)中的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
我错过了什么吗?我想我应该删除 MainWindow,但正如我所说,这只是给我一个黑屏。
最佳答案
您收到此错误是因为 NSMainNibFile
值是在 Info.plist
中设置的。它告诉操作系统在启动时打开该 NIB
文件。由于您出于某种原因取消了 NIB
,因此您必须通过删除 NIB
文件来填补您所创建的漏洞。
- 您必须从
Info.plist
中删除该 key 。 您必须在
main.m
中进行一些更改。通常,MainWindow.xib
包含有关应用程序委托(delegate)的信息,但现在您需要提供它。找到int retVal = UIApplicationMain(argc, argv, nil, nil);
行并将其替换为int retVal = UIApplicationMain(argc, argv, nil, @"yourDelegateClassName");
到目前为止您所做的操作将实例化应用程序委托(delegate),并且您的
application:didFinishLaunchingWithOptions:
将被调用,但您的window
尚未设置为它再次由NIB
文件处理。这将适用于您的所有网点。不仅仅是您的“窗口”。
您必须像这样对 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;
}
以上方法只是一个模板,必须根据您的要求进行修改。
关于iphone - “由于未捕获的异常而终止应用程序”..它找不到不再存在的主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386019/