8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Xcode - 如何修复“NSUnknownKeyException”,原因:'…此类不符合键 X 的键值编码' 错误?

Cem Polat 1月前

187 0

我正在尝试将 UILabel 与我的类中创建的 IBOutlet 链接起来。我的应用程序崩溃并出现以下错误\'*** 由于未捕获的异常'NSUnknownKeyException' 而终止应用程序,...

我正在尝试将 a UILabel IBOutlet 我课堂上创建的 a 联系起来。

我的应用程序崩溃并出现以下错误\'

*** 
Terminating app due to uncaught exception
'NSUnknownKeyException', reason: 
'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key XXX.'

这是什么意思?我该如何解决它?

帖子版权声明 1、本帖标题:Xcode - 如何修复“NSUnknownKeyException”,原因:'…此类不符合键 X 的键值编码' 错误?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Cem Polat在本站《uitableview》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 当我重命名视图控制器的类并忘记 nib 名称也需要更改时,就会发生这种情况。由于 nib 名称只是一个字符串,因此不会出现编译器错误。

  • 就我而言,这是由于引用了错误的 Nib 造成的:

    BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
    
  • iOS 运行时错误

    线程 1:\'[ setValue:forUndefinedKey:]:此类不符合键 xxx 的键值编码。\'

    在以下情况下可能会出现此错误:

    1. .xib + UITableViewHeaderFooterView

    当您使用 UITableView 其中显示扩展 UITableViewHeaderFooterView 并与 .swift 文件

    • File's Owner

    正确方法:

    • 改为 Custom Class 设置 containerView
    1. 检查 .xib 中的 Outlets。Xcode 可以使用黄色说明标记来标记其中一些。在这种情况下,只需重置它即可
  • 在我的情况下, module 指定了错误的 target 。只需删除 module 名称并检查 Inherit Module from target 即可。

    enter image description here

  • 如果你有一个带有 IBOutlets 的自定义 UIViewController 子类,并且它导致了问题,那么我发现唯一能真正消除错误的步骤是

    .1 将类更改为 UIViewController

    .2 断开所有插座(现在它们都会有黄色警告三角形) - 只需断开有问题的插座就足够了。

    .3 执行所有标准步骤 - ↑⌘K,删除派生数据(、祈祷垫、念珠)

    .4 启动应用程序 – 前往问题现场。

    .5 终止应用程序,返回 Interface Builder 并将类改回您的自定义类名。

    .6 重新连接插座。

    启动应用程序通常会解决键值合规性问题。

  • 我有同样的症状。根本原因是我的源文件的“目标成员资格”未设置为正确的目标。我猜想这意味着我的类不会被构建并包含在我的应用程序中。

    纠正方法:

    1. 突出显示您的.m 文件。
    2. 在右侧窗格中,选择文件检查器。
    3. 在“目标成员”部分下,确保选中了适当的构建目标。

    希望这对某些人有帮助。

  • 就我的情况而言。合并后,xib 文件中没有缺失出口。

    Shift + Command + K

    解决了我的问题。我清理了我的项目并重建。

  • 这个错误是另外一回事!

    以下是我修复它的方法。我使用的是 xcode 版本 6.1.1 并使用 swift。每次我的应用程序尝试执行 segue 跳转到下一个屏幕时,我都会收到此错误。以下是我所做的。

    1. 检查按钮是否连接到正确的操作。(这不是问题,但仍然值得检查)
    2. 检查按钮上没有你可能错误创建的任何其他操作或出口。(这不是问题所在,但还是值得检查一下)
    3. 检查日志并确保下一个屏幕中的所有按钮都有正确的操作,如果有任何过渡,请确保它们具有唯一的标识符。(这就是问题所在)
      • One of the segues did not have a unique identifier
      • One of the buttons had an action and two outlets that I created by mistake.
      • Delete any additional outlets and make sure that you the segues to the next screen have unique identifiers.

    干杯,

  • 我发现的另一个“不合规”问题是,由于某种原因,我设法拥有一个类的两个副本。

    我向错误的副本添加了键。Interface Builder 仍然可以看到这些键并允许我连接到它们,但在运行时它使用的是没有新键的类的另一个副本。

    为了找到哪个是“正确”的副本,我使用 XCode 的 cmd - 单击其他地方的类名以跳转到正确的副本,然后我删除了不好的未使用的副本(首先从未使用的副本中带来我的编辑之后)。

    故事的寓意是:重复的类文件是不好的。

  • mao 1月前 0 只看Ta
    引用 11

    我刚刚在重复的项目中遇到了这个问题,通过检查两个地方解决了:

    1-确保列表中有.m 文件->项目-构建阶段-编译源
    2- 之后,转到界面生成器(这可能是仅在 IB 中发生的错误)并取消链接所有属性、标签、图像等...然后重新链接所有。我意识到我已删除了一个属性,但它仍然链接到 IB。

    希望它对某些人有用。

  • JubG 1月前 0 只看Ta
    引用 12

    这可能是引用您已重命名或删除的 Xib 接口组件的情况。重新引用对我来说有效。

  • 引用 13

    \'此类不符合该键的键值编码\'我知道有点晚了,但我的答案不同,所以我认为需要发布,我以错误的方式推动了第二个控制器,这里是示例

    推控制器的错误方法

    UIViewController* controller = [[UIViewController
     alloc]initWithNibName:@"TempViewController" bundle:nil];
             [self.navigationController pushViewController:controller animated:true];
    

    正确的方法

    TempViewController* controller = [[TempViewController
     alloc]initWithNibName:@"TempViewController" bundle:nil];
             [self.navigationController pushViewController:controller animated:true];
    

    我没有找到任何上述答案,所以也许它可以帮助遇到同样问题的人

  • 如果您尝试通过 Cocoa 绑定连接 Swift bool 值,则需要使用 @objc 指令将其公开;否则您确实会收到此错误。这应该是最好的答案。

  • 补充一下,因为我也遇到了这个错误。浏览所有这些答案似乎大多数都适用于处理 UI 和情节提要。我知道原始发帖人似乎确实在使用 UI,但在寻找此错误的可能原因时,大多数问题都指向这个问题,而其他问题则被关闭为重复或只是在情节提要中连接事物时遇到问题,所以我将添加我的解决方案。

    我当时正在用 Swift 2 编写一个 Web 服务。我已经构建了所有需要的代理对象和存根。当我循环遍历返回的 XML 时,我正在动态实例化我的对象,这些对象都来自它们 NSObject 并在它们上使用 setValue:forKey 。每次 setValue:forKey 尝试设置属性时,它都会因这个错误而崩溃。

    我为处理的每个类型都有一个 switch 语句(例如 Bool? , CShort? , String? ),并且对于每个 XML 节点,我都会检查对象的类型,然后将值转换为该类型并尝试使用 setValue:forKey .

    最后我开始注释掉所有这些 setValue:forKey 行,发现我的 default switch 语句确实有效 String? .

    我最终发现, 可选的 swift 类型 可以直接映射到 Objective-C 类型(例如 setValue:f不能Key 或 ), String? or NSNumber? 。我最终将所有 CShort? 类型更改为 , NSNumber? 因为它具有直接映射。对于 Bool? 并将其初始化为 Bool 就可以了 false 。其他人可能没有那么奢侈。

    不管怎样,这真是一个令人头痛的问题,所以希望这可以帮助其他有类似问题的人,并不断被重定向到这个问题并对自己说,“我在 UI 中没有做任何事情!!”。

    最后再重申一次,键值编码不适用于可选项。下面是我最终在某个地方找到的,但我忘记在哪里了,所以对于发布此内容的人,我深表歉意,如果我记得在哪里找到这个,我会给予赞扬,但它救了我的命:

    您不能在 Optional Int 属性上使用 KVC,因为 KVC 是 Cocoa / Objective-C,而 Objective-C 无法看到 Optional Int - 它没有桥接到 Objective-C。Objective-C 只能看到桥接到 Objective-C 的类型:

    从 NSObject 派生的类类型

    使用 @objc 公开的类类型

    桥接的 Swift 结构体

  • 对于具有两个目标(具有自己的 MainWindow XIB)的项目,我遇到了类似的问题。导致此错误的根本问题是 UIViewController 类未包含在第二个项目的资源列表中。即界面生成器允许我在 MainWindow.xib 中指定它,但在运行时系统找不到该类。

    即,按住 cmd 键并单击有问题的 UIViewController 类,然后仔细检查它是否包含在“目标”选项卡中。

  • Eph 1月前 0 只看Ta
    引用 17

    投票赞成,因为在我的案例中确实如此。我使用的是 Swift 和 Storyboards。当我创建一个新的构建目标(以创建构建变体)时,应用程序在新变体中无法工作,而第一个变体可以正常工作。应用程序在视图控制器上崩溃,其中模块名称以某种方式设置为第一个目标中的模块,而在工作的视图控制器中它是当前 -。在这种情况下,您需要删除那里的模块名称。

  • Identity Inspector 中 View Controller 的“Module”属性可能与您的预期不同。另外,请确保将新类添加到您的目标列表中。

  • 我已将我的标签栏应用从 .xibs 转换为 .storyboard 场景。当我尝试实现一个显示自定义表格视图的选项卡时,它崩溃了,并显示“缺少标识符 storyboardPlaceholder 的代理”。经过数小时的尝试修复后,我找到了这篇帖子。当我从项目中删除原始 .xib(现已转换为 storyboard 场景)文件后,选择表格视图选项卡时,应用停止崩溃。

  • 当我的视图控制器最初有一个 .xib 文件,但现在以编程方式创建时,就会发生这种情况。

    尽管我已从该项目中删除了 .xib 文件,但用户的 iPhone/iPad 可能包含此视图控制器的 .xib 文件。

    尝试加载 .xib 文件通常会导致此崩溃:

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

    以编程方式创建时的解决方案可能是这样的:

    -(void)loadView {
        // Ensure that we don't load an .xib file for this viewcontroller
        self.view = [UIView new];
    }
    
返回
作者最近主题: