【问题标题】:Terminating app due to uncaught exception 'NSUnknownKeyException' - error [duplicate]由于未捕获的异常“NSUnknownKeyException”而终止应用程序 - 错误 [重复]
【发布时间】:2012-06-01 10:01:21
【问题描述】:

我正在关注 Big Nerd Ranch iOS 编程指南(第 3 版),并已按照它所说的创建这个项目的所有内容进行操作。我收到一个错误,但我不知道如何解决,因为我是 iOS 新手。当我在 Xcode 的模板中使用基于单视图的应用程序时,我的程序最初遇到了问题,给了我这个错误:

2012-05-25 16:02:12.926 Whereami[1083:707] 应用程序窗口应在应用程序启动结束时有一个根视图控制器

在浏览了一些论坛后,我发现我需要在 Xcode 中设置我的 MainInterface:

之前 - https://i.imgur.com/YCnRM.png

之后 - https://i.imgur.com/5QnJ3.png

通过将 xib 文件名添加到设置中的 MainInterface 文本框来修复上述错误后,我收到此错误:

    2012-05-25 16:04:09.068 Whereami[1102:707] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x11f620> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key activityIndicator.
*** First throw call stack:
(0x3507b88f 0x364a2259 0x3507b5c5 0x30eb6323 0x30eb5e23 0x30e8ff09 0x34fda7d3 0x34fdb461 0x323111af 0x3231294d 0x32248509 0x320d1893 0x320cb8d7 0x32099c6b 0x3209970f 0x320990e3 0x362ce22b 0x3504f523 0x3504f4c5 0x3504e313 0x34fd14a5 0x34fd136d 0x320caa13 0x320c7e7d 0x7ebd7 0x7eb7c)
terminate called throwing an exception

这是我的源文件:

AppDelegate.m - https://i.imgur.com/7FdCZ.png

WhereamiViewController.h WhereamiViewController.m

查看 - https://i.imgur.com/IZeoa.png

运行-https://i.imgur.com/dyYKd.png

我很困惑,需要弄清楚这一点,这样我才能继续前进并最终完成这本书。我需要在下周之前完成我的第一个工作应用。

【问题讨论】:

  • self.window.rootViewController = yourMainView in applicationdidFinishLaunching 方法
  • 这就是我的应用程序已经在做的事情。该代码是由 Xcode 生成的
  • 还有一个建议,崩溃日志中提到了activityIndi​​cator,你还在访问它吗?尝试从 .h 文件和 xib 文件中暂时删除它,看看它是否仍然崩溃

标签: iphone objective-c ios xcode macos


【解决方案1】:

问题文本似乎是您在问这个...... 一种设置方法如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    LoginViewController* loginView = [[[LoginViewController alloc]initWithNibName:nil bundle:nil]autorelease];
    mainNavController = [[UINavigationController alloc]initWithRootViewController:loginView];

    //here is the magic line
    [_window addSubview:mainNavController.view];

    [self.window makeKeyAndVisible];
    return YES;
}

或者你可以在没有 mainNavController 的情况下这样做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        // Override point for customization after application launch.
    LoginViewController* loginView = [[[LoginViewController alloc]initWithNibName:nil bundle:nil]autorelease];

    [_window addSubview:loginView.view];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

标题好像是你在问这个…… 现在,当您尝试访问不存在或拼写错误的选择器或类成员时,通常会出现 NSUnknownKeyException 错误(对我来说通常是后者!)。您可以将类想象成字典,调用成员或函数就像通过键查询字典对象。 例如。

`@selector(misspelledFunctionName:)` 

[object functionThatIsMisspelledOrNotDefinedInObject];

我不确定被问到的是哪个问题,所以我试图回答这两个问题。希望这会有所帮助:)

编辑:这些最终都是答案,或者无论如何都是其中的一部分。 UIApplication 没有分配正确的视图,因此 xib 正在发送不存在的键并导致它崩溃。我从 plist 中删除了根视图分配(结果没有崩溃,但出现空白屏幕),然后像上面一样分配了视图(视图显示完美!)。

【讨论】:

  • 我在上面发布了我的代码并解决了这个问题。我不会向未实现它们的对象发送任何消息。这个应用程序的功能实际上非常简单,并且没有太多的内容。你上面的建议对我的具体问题没有帮助,尽管我很感激你的尝试。你还有什么建议吗?
  • 嘿,似乎正在从不包含 activityIndi​​cator 的类对象的某个位置调用 activityIndi​​cator。据说 UIApplication 不知道 activityIndi​​cator 是什么。尝试对 activityIndi​​cator 进行全局项目搜索,并确保在您认为的类上调用它。问题出在某个地方。注意:您可以通过单击放大镜在最左侧窗口中进行全局搜索。
  • 它的唯一位置是.h 文件来声明它,在我的.m 中调用dealloc。它将它设置为 nil。
  • 您确定删除了为您自动生成的 [activityIndi​​cator release] 语句和 @synthesize activityIndi​​cator 语句吗?如果所有其他方法都失败了,请随时压缩并通过电子邮件发送给我 tom@creoagency.com 我不介意快速浏览一下。
  • 你的电子邮件是什么?当我点击你的个人资料时,我找不到它。编辑:发送!
猜你喜欢
  • 2013-06-17
  • 2012-01-04
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多