我正在尝试在 Swift 中制作一个天气应用程序,它将保存我添加到核心数据的城市,每个城市都包含一个天气对象,该对象也保存到核心数据和其他各种变量。
但我很快就发现,在 Core Data 上下文之外使用 Core Data NSManagedObjects 子类几乎是不可能的(处理 NSNumber 和类似的,没有自定义 init,被迫将它们保存在某个地方,如果我明天停止使用 Core Data 会怎么样,...) 。
那么,既要继续使用核心数据,又要在其上下文之外使用模型的最佳实践是什么?
我现在的解决方案是为每个模型创建一个类,所以:
class City
{
var country: String?
var name: String?
// ...
}
对应的类是:
class CD_City
{
@NSManaged var country: String?
@NSManaged var name: String?
// ...
}
所以我可以使用City
我想要的任何地方、任何方式。但我需要一个函数来转动City
into CD_City
和相反。所以我真的不确定我是否以最好的方式做这件事。
另外您会推荐什么作为转换方法?
(仅供参考,我使用 MagicalRecord 作为核心数据助手)
TL;DR - 不要这样做,否则事情会崩溃。
过去有各种技巧可以让它发挥作用,但它们都依赖于 CoreData 中未记录的行为。我会never在我想向另一个人展示的代码中使用类似的东西,更不用说运送给客户了。 CoreData需要插入代理对象 http://en.wikipedia.org/wiki/Proxy_pattern那个挂钩属性变更事件 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html在您的模型对象上,它能够可靠地做到这一点并跟踪原始数据值的唯一方法是它是否负责首先创建这些实体;这也使得断层和独特的系统 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html工作。不要将 Core Data 视为 ORM,它实际上是一个对象图管理框架 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdTechnologyOverview.html#//apple_ref/doc/uid/TP40009296-SW1,因此它被设计为以某种方式使用,没有简单的解决方案来回避它safely.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)