错误:由于未捕获的异常'NSUnknownKeyException',应用程序终止,原因是:'[<UIApplication 0x6887a30> setValue:forUndefinedKey:]'。

4
完整的错误信息如下:终止应用程序,原因是未捕获的异常 'NSUnknownKeyException',原因:'[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key。

所以我已经尝试了其他人对类似问题的解决方法。我已经尝试删除项目中对landscapeView的所有提及,包括ViewController_iPhone.xib中File's Owner中的Connections,然后我从头开始,在父类ViewController中添加了outlets(因为我也想在iPad上使用landscapeView和portraitView),然后我分别在ViewController_iPhone.xib和ViewController_iPad.xib中设置与各自的名为Landscape的UIView的连接,但仍然出现错误。

我刚开始学习应用程序开发,所以我正在尝试制作一个支持iPhone和iPad上所有方向的应用程序模板。谢谢您的帮助。

编辑:这里是我的AppDelegate.h、.m和main.m的链接:我遇到了“ Applications are expected to have a root view controller at the end of application launch error”错误

编辑2:所以我也尝试将landscapeView设置为ViewController的属性,并在ViewController.m中创建setter方法,但仍然存在相同的问题。


没有至少提供一个堆栈跟踪或者其他具体关于你的程序的信息,别人要给出有建设性的回应会非常困难。另外,landscapeView 在这个问题中有什么作用? - zmccord
你得到的错误意味着你正在尝试设置一个不存在的键值对。在你的代码中,在哪里你正在尝试设置一个键值对? - Pochi
好的,@zmccord,我在哪里可以找到堆栈跟踪?还有其他可以链接的东西吗? - Peter P
好的,@zmccord,我在哪里可以找到堆栈跟踪?还有其他什么可以链接的吗?至于Luis Oscar,我不知道,因为我一直在尝试找到它,因为我有点明白出了什么问题,但我不知道哪里出了问题,在main.m中的主函数在运行程序时弹出绿色。我已经在我的项目中搜索了“key”这个词,并且在注释中和AppDelegate.m中的[didFinishLaunchingWithOptions]函数内的[self.window makeKeyAndVisible];行中弹出两次。 - Peter P
4个回答

10

我发现这个错误最常见的情况是在你从一个xib中实例化视图,并且这个操作是在一个不是xib所有者的类中进行的。

我的意思是你可能会调用类似于下面代码的东西:

[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
你正在更改 "owner",所以必须确保 `self` 所引用的类具有 "MyView" 需要的所有 IBOutlet 属性。通常这是在 Interface Builder 中完成的,但在这种情况下,您正在以编程方式设置所有者,这意味着您无法在 IB 中进行连接。当缺少 IBOutlet 时,应用程序尝试进行这些连接并失败,从而导致出现你看到的错误。
我的建议(仅根据你提供的信息)是检查是否在没有正确的 IBOutlets 的情况下进行了此调用。

Aaron,我能把我的项目发送给你吗?但是我只完成了基本的Single View项目(适用于所有设备),我只创建了2个ViewController的子类,然后在两个xibs中创建了UIView对象,再在IB中设置属性以便自动生成代码,我将这2个xibs的File Owner类设置为正确的子类,并且在Info选项卡中选择了初始不显示状态栏,将主nib文件和主nib文件(iPad)设置为这两个xib文件。 - Peter P
在我的appdelegate.m文件中,我通过将[ViewController alloc]更改为[ViewController_iPhone alloc]和[ViewController_iPad alloc]来更改applicationDidFinishLaunchingWithOptions方法,并且我编写了导入这两个子类的代码。 - Peter P
感谢iPhone开发者论坛,解决了我的问题。问题是由于某些函数覆盖和模板混合导致的错误。 - Peter P
很高兴你得到了答案。抱歉我没能早点看到你的代码。 - Aaron

8

我必须移除主界面的NIB或XIB文件(或者这个版本是什么)。

苹果公司在向不知情的公众发布破损软件之前进行全面测试肯定会更好。他们可以用任何一种方式来处理问题,但他们选择了运行时崩溃和模糊的[无意义]错误消息。

enter image description here


这解决了我的问题。谢谢!同意错误信息毫无用处。 - Jim Bergman
1
这导致我看到了一个黑屏。如果没有故事板,你该如何显示你的应用程序呢? - Jacksonkr

1

有两个主要原因如下:

  1. 您的IBOutlet可能会损坏,请在Storyboard或IB中检查。
  2. 如果您没有为自定义类选择模块,请查看您的Storyboard。

0
我发现的问题是我在 viewcontroller.h 中删除了一个 WebView,但没有删除指向该 WebView 的 xib 文件!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接