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) 手动迁移是事务性的吗?的主要内容,如果未能解决你的问题,请参考以下文章

如果我使用 Core Data 手动迁移,我以后可以集成 iCloud 同步吗?

iOS Core Data 不执行轻量级迁移

备份和恢复 Core Data SQLite(核心数据)

手把手教你从 Core Data 迁移到 Realm

MySQL 迁移至 SQLite 问题记录

OS X 上的 Core Data 轻量迁移