Xcode 8 核心数据异常

Posted

技术标签:

【中文标题】Xcode 8 核心数据异常【英文标题】:Xcode 8 Core Data abnormality 【发布时间】:2016-07-21 07:17:52 【问题描述】:

我正在尝试将我的项目更新为具有核心数据的 Swift 3。我遇到了严重的错误,我真的不知道发生了什么。我的核心数据模型具有以下属性

@NSManaged var name: String?
@NSManaged var count: NSNumber
@NSManaged var isDelivered: NSNumber

我可以设置任何其他属性,但 isDelivered 除外。当我尝试使用

myobject.isDelivered = true

我在控制台上收到以下错误。

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[MyModel setDelivered:]: 无法识别的选择器发送到实例 0x6000000d3780'

看起来 Xcode 正在从 isDelivered 属性中删除 is 部分,这会使应用程序崩溃。除了更新我的模型之外,我还能做些什么来防止这种情况发生?谢谢。

【问题讨论】:

你试过myObject.isDelivered = NSNumber(booleanLiteral: true)吗? 结果相同。从日志中可以看出,消息应该发送到isDelivered而不是Delivered。发生了一些奇怪的事情 尝试将 isDelivered 设为布尔值和可选值。 【参考方案1】:

这是一个BUG。这是一个非常令人困惑的错误。对于任何访问此问题的人,这是我在 Apple 论坛上找到的答案。

当前版本的 Swift 3 beta 在处理带有“is”前缀的属性方面似乎存在一些缺陷。

https://forums.developer.apple.com/thread/50863

用户OOPer

的回答

避免在属性名称中使用“is”,如果不能,请尝试以下操作:

newWriter.setValue(true, forKey: "favorite")

(更新) 尝试将@objc 名称添加到属性中:

@NSManaged @objc(isFavorite) var isFavorite: Bool  

【讨论】:

以上是关于Xcode 8 核心数据异常的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 3 xcode 8 在核心数据中预加载数据库

xcode核心数据部分错误

在 Xcode 8.2 beta 中创建 NSManaged 子类时出错

核心数据自动生成的类编译器警告

在 iOS 8 Today Extension 中获取 parse.com 用户数据时出现异常

swift 3 Xcode 8 中的 NSManagedObject 和 CoreData