ios - 在 Xcode 7.3 中使用 Swift 实例化核心数据托管对象

标签 ios xcode swift core-data xcode7

在 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/

相关文章:

ios - 从 NIB 创建 UIView

ios - 按时间顺序排列聊天。

ios - 如何删除默认按钮?

xcode - 安装 xCode 7 和 xCode 6.4 后 iOS 模拟器崩溃

swift - 如何将 UnsafeMutableBufferPointer 的一部分作为新的 UnsafeMutableBufferPointer

ios - 默认值可选 swift 不会使其成为非可选的

iphone - UITableViewCell 重复 UIImages

swift - Xcode头文件命令点击

swift - 我在 xcode 中遇到错误(没有可用的重载)

ios - 链接的 TTTAttributedLabel 和弹出窗口