如何在Core Data上下文之外使用Core Data模型子类?

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

但是我很快就发现,在核心数据上下文之外使用核心数据NSManagedObjects子类几乎是不可能的(处理NSNumber和类似的问题,没有自定义的初始化,被迫将它们保存在某个地方,如果我明天停止使用核心数据, 。

那么,继续使用核心数据的最佳做法是什么,但是还要在上下文之外使用模型?

我现在的解决scheme是为每个模型创build一个类,所以:

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

是相应的类:

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

所以我可以在任何地方使用City ,无论如何我想要的。 但是我需要一个function来把一个City变成CD_City而且相反。 所以我真的不确定我是不是最好的方法。 另外你会推荐作为一种转换方法?

(仅供参考,我使用MagicalRecord作为核心数据帮手)

TL; DR – 不要这样做,否则事情就会破裂。

曾经有过各种各样的黑客来获取它的工作,但是他们都依赖于CoreData中的无证行为。 我不会在代码中使用这样的东西,我想展示另一个人,更不用说给客户。 CoreData需要插入代理对象挂钩到您的模型对象的属性更改事件 ,它可以可靠地做到这一点,跟踪原始数据值的唯一方法是,如果它是负责创build这些实体的第一个地方; 这也使得错误和取消系统的工作。 不要将核心数据视为ORM,它确实是一个对象图pipe理框架 ,因此它被devise成以某种方式使用,没有简单的解决scheme来安全地进行旁路

如果你不想保存一个NSManagedObject或者它的一个子类,那么你可以使用它来创build它

 init(entity entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) 

并通过nil insertIntoManagedObjectContext这将创build一个实例,但它不会被保存到MOC。

如果你以后要把它保存到MOC中,你可以使用NSMangedObjectContext

 func insertObject(_ object: NSManagedObject)