如何在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)
- mergeChangesFromContextDidSaveNotification之后的KVO通知
- 如何在Swift中正确地testing核心数据
- iOS 9和iOS 10 CoreData
- iOS – 保持旧的SQLite数据库,同时更新到新版本
- Core Data父级ManagedObjectContext是否需要与子级上下文共享一个并发types?
- NSManagedObject setter给我:无法识别的select器发送到实例
- 迁移Core Data存储时出现错误消息
- 为什么NSManagedObjectContext队列在主线程上执行?
- ios – 使用线程和核心数据时的错误(objective-c)