当前位置: 首页 > 面试题库 >

Swift 4“此类不符合键值编码”

邹华皓
2023-03-14
问题内容

我有一个雨燕库,是严重依赖obj.valueForKey()NSObject

迁移到Swift 4之后,我发现这些调用总是会崩溃,并显示错误“该类不符合键的键值编码…”,除非使用声明了我要查找的属性@objc

现在是否必须声明@objc要使用此方法找到的属性?还有其他选择吗?


问题答案:

当您执行迁移时,Xcode询问了@objc推断,您可能选择了新类型而不是Swift3。

可能的解决方案:

@objc根据需要在每个方法上使用而不是整个类。

@objcMembers

您可以@objcMembers在课堂上使用。

将@objcMembers属性应用于类会隐式将@objc属性添加到其所有与Objective-C兼容的成员。

使用Objective-
C行为编写Swift类和协议

请记住: 由于应用@objc属性可能会增加应用程序的编译大小并会对性能产生不利影响,因此 只有在每个成员都需要应用@objc属性时
才将@objcMembers属性应用于声明

将推理切换为旧行为

你也可以改变下的项目的行为: Build Settings> Swift 3 @objc Inference> On/Off



 类似资料:
  • 问题内容: 我正在关注标题为“ iOS的快速教程:NSFileManager持久数据”的教程 ,并且在29分钟左右前后遇到错误。当我尝试在iOS模拟器上运行它时,收到错误消息: 由于未捕获的异常’NSUnknownKeyException’而终止应用程序,原因:’[setValue:forUndefinedKey:]:此类与键theLoadMethod的键值编码兼容。 显然是基于错误,我认为问题是

  • 问题内容: 在Apple的Objective- C中,有一种叫做“键值编码”的东西,它使您可以使用类似于文件系统路径的字符串遍历对象图。有一个非正式的协议(即接口),它允许对象根据要求的“键”返回值。例如,默认值是返回由键命名的字段的值,而像NSDictionaries这样的关系集合可以实现更有趣的行为。 伪代码示例: Java有这样的东西吗?实施起来很容易,但是我想我会首先考虑的。 问题答案:

  • 我有一个类,当序列化时,我想作为一个没有键值对的字符串返回。字符串变为字符串。int变为int。如何使类变为字符串? 查看Data的合同和序列化,看起来这是不可能的。SeriezationInfo. addValue(名称,值)设置强制您的整个对象进入键值方法。我只想返回“A和B”。 例如,当使用DataContractJsonSerializer序列化时,我希望它是: 不 假设我有一个使用这两种

  • 我已经研究了几个小时,但似乎无法解决这个问题。错误与这段代码有关: (问题底部的完整代码。我用截图直观地显示问题。) 错误本身是: 不存在类型变量U的实例,因此GetUsersFaradacCountResponse符合CompletionStage 在s链的最开始,我删除了,并使用IntelliJ的“引入局部变量…”查看整个链(直至并包括第1118行)返回的类型的功能: 结果是一个 但是您可以看

  • 我正在尝试开发一款android应用程序,具有回收视图。所以我创建了一个项目视图、一个模型类和适配器。在在viewHolder方法内部初始化,在初始化变量时显示错误,我无法找出下面这段代码的错误。 下面是item_view_model的代码。xml 下面是ModelClass的代码。JAVA 下面是**适配器的代码。爪哇** 如何解决这个问题??

  • 问题内容: 我在如何对我的快速代码实现websocket功能时遇到麻烦。 我已经完成了服务器实施和另一个javascript客户端。他们工作得很好。因此,我相信websocket服务器没有错。 但是,如果我迅速编写代码,那是行不通的。没有错误发生,并且控制台上未显示任何消息。 这是我的快速代码。 应用运行时,我想在控制台上看到“ socket connected”消息。我认为插座有问题。但是我不知