调用addPersistentStoreWithType
对象的NSPersistentStoreCoordinator
方法时,究竟发生了什么?
通过查看Web上的示例,我看到调用此方法会将给定URL的持久存储添加到持久性存储协调器,我是对的吗?
我的主要问题是如果发生了什么:
谢谢!
答案 0 :(得分:2)
如果给定的URL上没有商店,CoreData将创建它,根据与持久性商店协调员关联的managedObjectModel添加相关表。
如果给定URL存在商店,CoreData将检查以确保它与模型一致。如果没有,则(默认情况下)CoreData将抛出错误:
用于打开商店的模型与用于创建商店的模型不兼容
当人们第一次开始构建和设计CoreData应用程序时,这是一个常见问题。该阶段最简单的解决方案就是从模拟器中删除应用程序(删除现有存储)并重新运行。但这对于生产应用来说不是一个可行的解决方案,它需要适应模型的设计变更,同时保留用户的数据。为解决此问题,CoreData支持多个版本的模型,并具有用于从一个模型版本迁移到另一个模型版本的广泛API。有关完整信息,请参阅Core Data Model Versioning and Data Migration Guide。
对于许多模型更改,您可以使用"轻量级迁移"。有关使用轻量级迁移的一个很好的示例,请参阅this answer。
答案 1 :(得分:0)
虽然没有完全描述,但是,这个方法“会将给定URL的持久存储添加到我们的持久存储协调器”
更重要的是,它会创建一个或多个扩展名为.xml / .sqlite / .bin / custom
的数据文件为了便于说明Persistent Store&持久性商店协调员一起工作,让对象视为表格(虽然在大多数情况下技术上不是表格!)
托管对象模型(MOM)是框架/主模板(任何单词!)表,描述实体描述,仅包括3个事项:(实体)名称,(实体)属性和(实体)关系
持久对象存储(POS)表是持久存储'数据文件的对象存在。它被称为托管对象。
持久存储协调器(PSC)通过将MOM和POS组合成格式良好的井结构数据来完成惊人的任务。从技术上讲,PSC从POS检索数据并将其结构化为MOM定义的格式表。
一旦调用方法addPersistentStoreWithType
,PSC将执行恢复过程:引用MOM并将POS从Object提取到Persistent Store的数据文件中并保存为Script,Binary或某些存储方法。从Xcode 7开始,每次调用anyInstanceOfNSManagedObjectContext.save() throw
时,编译器都会自动为您保存持久存储。这意味着除非您有多个持久性商店,否则addPersistentStoreWithType
不是必须的。
希望这对你有帮助