setValue:forUndefinedKey:]:

21
FinalViewWithSending *newView = [[FinalViewWithSending alloc]initWithNibName:@"FinalViewWithSending" bundle:nil];
newView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:newView animated:YES]; //it crashes here with a thread 1 error, SIGABRT error..

It says:

"Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<FinalViewWithSending 0x1bef70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key loginButton.'"

没有名为loginButton的变量,所以我不确定为什么会出现错误...

谢谢


您还没有上传与错误相关的代码,请添加。 - Mick MacCallum
12个回答

35

您出现了错误是因为没有名为loginButton的属性。请检查您的.xib文件。几乎肯定有一个坏的链接指向了FinalViewWithSending对象(很可能是文件的所有者),它指定了loginButton,尽管它在类代码中不存在。


没有坏链接。我已经检查过了。我应该创建一个loginButton变量吗? - Szwedo
1
我不知道...如果是我,我宁愿找到实际的错误。如果你右键点击FinalViewWithSending.xib,将其作为源代码打开,然后搜索文本中的符号会怎样呢?有时xib中的事情会以在Xcode中不显示为UI元素的方式变得奇怪。 - Phillip Mills
你怎么将它作为源代码打开?我刚刚去了源代码控制并提交了更改...但我在那里也找不到它。 - Szwedo
如果你控制点击或右键点击文件名,你应该会得到一个菜单,其中包括“打开为”和一个子菜单,其中有一个源代码选项。 - Phillip Mills
还是没有发现loginButton在任何文件中(我已经检查了所有文件)。有什么想法吗?如果你们想要的话,我可以发布崩溃日志(控制台的粗体部分)?谢谢。 - Szwedo

9

菲利普·米尔斯是正确的。

对于任何搜索此问题的人来说,答案是编辑故事板并删除对指定未定义键的任何链接。您必须在外部编辑器中编辑故事板文件:右键单击层次结构中的故事板列表,然后单击“显示在查找器”或其他选项。在文本编辑器中打开,通过搜索删除所述链接,保存并返回Xcode。没有更多问题了。

当您不正确地从视图控制器中删除某些内容时,就会出现此问题。


当我保留了一个UIImageView时,这种情况发生在我身上。 - Victor Engel
2
对于新手来说,您不必打开文本编辑器并编辑故事板。查看->实用程序->显示连接检查器,单击不同的按钮以查看错误的连接。 - Joshua Dance

8

同意 - Phillip Mills是正确的。

有人提到要在文本编辑器中打开故事板 - 这是不必要的。

只需单击故事板,转到连接检查器。如果您有一个有问题的出口,您将看到出口旁边的感叹标记。删除它即可。


1
修复有问题的出口解决了我的问题。这是我所做的,点击抛出此错误的ViewController,在Xcode 8.1中通过View->Utilities->Show Connections Inspector进入Connections Inspector或者直接使用⌥⌘6 - Fei Zheng

8
由于这是该错误的第一个搜索结果,我决定为像我这样的新手编写一个答案。如果您从生成视图控制器中的代码的按钮上进行Ctrl拖动连接,然后仅删除代码而没有移除连接,则会出现此错误。我因为意外地将一些按钮添加为输出口而导致了该错误,当我想将它们添加为操作时。我删除了生成的代码,但坏的连接仍然存在。要查找和删除它们,请前往“视图->实用程序->显示连接检查器”,然后单击不同的按钮并单击x以删除坏的连接。

enter image description here


2
你可以尝试我用来解决setValue:forUndefinedKey:问题的方法。 http://i.stack.imgur.com/PDjub.png

2

如果您有任何本地化需求,请在所有storyboard中搜索错误链接(展开storyboard以查找本地化的storyboard)。

这是我的情况。我正在寻找一个storyboard中的错误链接,但它们实际上出现在本地化的storyboard中。


1
我有同样的问题:
之前我使用storyboards从textfield连接到头文件建立了一个连接。后来我决定重命名我的对象连接,不幸的是,我没有正确地断开连接。如果这个问题与我的相同,以前存在一个按钮连接,并且头文件中的代码已被删除,但连接没有被删除。
检查你正在segueing到的视图中的对象连接。

0

很可能,您之前创建了LoginButton,使用Cmd+Shift+F查找“LoginButton”,然后删除引用的输出并重新构建。


0

您可以使用关联对象来避免子类化。至于setValue:forKey:和setValue:forUndefinedKey:,请查看头文件(NSKeyValueCoding.h)以获取详细信息。

根据您的描述,在界面构建器中找到newView并右键单击它,您将看到类似于异常的loginButton。


0

对于这个问题的回答可能相对于提问的时间来说有些晚,但是我刚遇到了这个问题,并且尝试了这里发布的所有解决方案,但都没有起作用。

这是我的解决方案,希望能对将来的任何人有所帮助。

首先是问题:我使用了一个自定义的单元格类并建立了连接,在我的应用中一切正常运行。然后,我重命名了我的自定义单元格类,重新运行应用程序,但是出现了setValue:forUndefinedKey:]错误导致崩溃。

我的解决方案:点击.xib文件,选择Identity inspector,在Custom Class -> Class标签中输入新命名的类名。 应用程序错误得到解决。


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