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 8.2 beta 中创建 NSManaged 子类时出错