在 Xcode 7.3 中将 Core Data 与 Swift 结合使用时,我遇到了一个奇怪的错误。
我最近将代码库从 Swift 1.0 更新到了 Swift 2.2,现在在尝试访问 NSManagedObject 扩展的某些元素时遇到错误。
我已经在数据模型中设置了实体(此处称为“成员”),如下所示,其类名和模块与我在其他帖子中看到的相匹配:
Screenshot of Inspector View of Member Entity
该类本身具有以下最顶层声明:
@objc(成员(member)) 类成员:NSManagedObject {
我已经尝试删除和添加顶部的 @objc 部分,因为我看到人们提到它可能会导致问题。
我通过 NSManagedObject 扩展中的方便初始化程序实例化 NSManagedObjects 的实例,如下所示:
convenience init(context: NSManagedObjectContext, className: String) {
let entity = NSEntityDescription.entityForName(className, inManagedObjectContext: context)
self.init(entity: entity!, insertIntoManagedObjectContext: context)
}
最后,当我尝试在 Member 对象上设置某些属性时,发生了错误。我认为这可能与属性是否可选有关,但切换这些属性似乎没有效果。
我得到的错误是 EXEC_BAD_ACCESS 错误,但它似乎源于我实例化 Member 对象时打印出的以下内容:
MyAppName[23325:891360] CoreData: warning: Unable to load class named
'MyAppName.Optional("Member")' for entity 'Member'. Class not found,
using default NSManagedObject instead.
任何见解将不胜感激,因为我不确定还可以尝试什么,以及为什么要在类名的开头添加“.Optional”。
谢谢。
最佳答案
不要强制解开从 NSEntityDescription.entityForName
返回的可选内容。您可能应该在实体上放置一个守卫,并在实体不返回时抛出。
顺便说一句,我怀疑这种便捷方法是否能比调用 NSEntityDescription.insertNewObjectForEntityForName(_:inManagedObjectContext:) 带来什么好处。您仍在处理神奇的字符串和上下文。
关于ios - 在 Xcode 7.3 中使用 Swift 实例化核心数据托管对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923043/