我正在使用Xcode 4,我的软件在iPhone 4和模拟器上运行良好但是当我在iPhone 2G或3Gs等设备上测试时,我运行代码后立即出现此错误:
由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是键值rootViewController的键值编码兼容。'
寻找解决问题的方法我构建了一个hello world程序并且无法在iPhone 3gs上运行...在搜索解决方案时我发现了这个:
// self.window.rootViewController = self.viewController; [self.window addSubview:[self.viewController view]];
使用像这样的addsubview,程序运行正常......
好的,你好世界运行良好,但我的程序根本不起作用......
也许这是我应该改变的代码......(但我现在还没有......)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
//this and application should run on 3.1.3
if ([self.window respondsToSelector:@selector(setRootViewController:)])
self.window.rootViewController = self.viewController;
else
[self.window addSubview:self.viewController.view];
// Add registration for remote notifications
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
// Clear application badge when app launches
//application.applicationIconBadgeNumber = 0;
[self.window makeKeyAndVisible];
return YES;
}
我搜索有关此问题的一些信息,但每次我搜索我发现只是改变线 self.window.rootViewController = self.viewController;
但遗憾的是没多大帮助。
感谢你们的耐心等待:)
编辑:
我改变了代码
if ([self.window respondsToSelector:@selector(setRootViewController:)])
self.window.rootViewController = self.viewController;
else
[self.window addSubview:self.viewController.view];
到
[self.window addSubview:self.viewController.view];
但错误仍然相同......
答案 0 :(得分:1)
UIWindow
在iOS版本低于4.0时没有rootViewController
属性。因此,如果您想支持这些版本,则不能使用self.window.rootViewController = myViewController;
,通常需要将控制器的视图添加到窗口中,即:[self.window addSubview:myViewController.view];
编辑:问题是如何检查它是什么版本,因为3.1.3仍然可以响应setRootViewController(内置但不是公共变量)。