ios - 如何在核心数据上下文之外使用核心数据模型子类?

标签 ios swift core-data magicalrecord

我正在尝试在 Swift 中制作一个天气应用程序,它将保存我添加到 Core Data 的城市,每个城市都包含一个天气对象,该对象也保存到 Core Data 和其他各种变量。

但我很快发现,在 Core Data 上下文之外使用 Core Data NSManagedObjects 子类几乎是不可能的(处理 NSNumber 和类似的东西,没有自定义初始化,被迫将它们保存在某个地方,如果我明天停止使用 Core Data 会怎样,. ..).

那么在继续使用 Core Data 的同时也在其上下文之外使用模型的最佳实践是什么?

我现在的解决方案是为每个模型创建一个类,所以:

class City
{
    var country: String?
    var name: String?
    // ...
}

是对应的类:

class CD_City
{
    @NSManaged var country: String?
    @NSManaged var name: String?
    // ...
}

所以我可以随时随地使用City。但是我需要一个函数来将 City 转换为 CD_City 并相反。所以我真的不确定我是否以最好的方式做到了。 另外,您会推荐什么作为转换方法?

(仅供引用,我使用 MagicalRecord 作为核心数据助手)

最佳答案

TL;DR - 不要那样做,否则会损坏。

过去有各种技巧可以让它正常工作,但它们都依赖于 CoreData 中未记录的行为。我永远不会在我想展示给其他人的代码中使用任何类似的东西,更不用说运送给客户了。 CoreData需要插入proxy objects Hook property change events在您的模型对象上,它能够可靠地做到这一点并跟踪原始数据值的唯一方法是它是否首先负责创建这些实体;这也使得 faulting & uniquing system工作。不要将 Core Data 视为 ORM,它实际上是一个 object graph management framework ,因此它被设计为以某种方式使用,没有简单的解决方案来安全地避开它。

关于ios - 如何在核心数据上下文之外使用核心数据模型子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382590/

相关文章:

ios - 从一个 UIImage 问题中添加 Tabbar 项目图像

swift - 如何使用alamofire发送数组参数

ios - 如何在 Core Data 中获取 MOMD 文件的路径

ios - 当新行插入 tableView 时,我是否必须调用 begin/endUpdates 方法?

iphone - UITapGestureRecognizer 忽略网络链接请求

ios - CIRadialGradient 减小图像尺寸

Swift 使用解除警报消息

ios - 为什么核心数据获取请求从自定义 UITableViewCell 返回空?

ios - 核心数据崩溃不可变对象(immutable对象)

ios - 无法在 segue 中设置 NSArray