我刚刚删除了所有.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,但正如我所说,这只是给我一个黑屏。
答案 0 :(得分:6)
您收到此错误是因为NSMainNibFile
中设置了Info.plist
值。它告诉操作系统在启动时打开NIB
文件。由于您因某种原因忘记了NIB
,因此您必须通过删除NIB
文件填写您创建的漏洞。
Info.plist
。您必须在main.m
中进行一些更改。通常MainWindow.xib
包含有关您的应用程序委托的信息,但现在您需要提供它。找到标有int retVal = UIApplicationMain(argc, argv, nil, nil);
的行,并将其替换为int retVal = UIApplicationMain(argc, argv, nil, @"yourDelegateClassName");
到目前为止您所做的事情将实例化应用程序委托,而application:didFinishLaunchingWithOptions:
将被调用,但window
尚未设置,因为它由{{NIB
处理。 1}}再次归档。这将适用于您的所有商店。不仅是你的“窗口。
您必须对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;
}
上述方法只是一个模板,必须根据您的要求进行修改。