Core Data (SQLite) 手动迁移是事务性的吗?
Posted
技术标签:
【中文标题】Core Data (SQLite) 手动迁移是事务性的吗?【英文标题】:Is Core Data (SQLite) manual migration transactional? 【发布时间】:2012-12-15 07:16:43 【问题描述】:更改代码并发布。现在应用程序在启动时超时,同时将持久存储协调器更新为新模型。想知道迁移是否是事务性的,这样我就可以弄清楚如何修复。迁移将在超时之前通过迁移获得 x%。
如果是事务性的,我只需要先启动应用程序然后迁移。如果不是事务性的,我担心用户的架构只会部分迁移。
背景
调用代码
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
如预期的那样,当存在较新的数据库模型时它会失败。以前会提示用户通过UIAlertView
更新数据库。然后将调用以下语句。
[persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:optionsDictionary error:&error]
如果initWithManagedObjectModel
失败,我决定运行第二行代码。除了这个语句在 `- (NSPersistentStoreCoordinator *)persistentStoreCoordinator ' 方法中运行之外,这并不是那么愚蠢,因此应用程序现在有时会在启动时超时。
在这个阶段我不知道该怎么做。数据库是半映射到新模型还是仍代表以前的模型?
【问题讨论】:
【参考方案1】:核心数据迁移是事务性的,因为迁移是在内存中完成的,一旦完成,旧数据库就会在内存中替换为新版本。
因此,当从didFinishLaunchingWithOptions
方法中删除迁移过程后,我在启动时尝试迁移的超时问题得到了解决。新的更新解决了之前升级超时的问题。
【讨论】:
以上是关于Core Data (SQLite) 手动迁移是事务性的吗?的主要内容,如果未能解决你的问题,请参考以下文章