更改了代码并发布了。现在,应用程序在启动时超时,同时将持久性商店协调员更新为新模型。想知道迁移是否是事务性的,所以我可以找出解决方法。在超时之前,迁移将通过迁移获得x%。
如果是事务性的我只需先启动应用程序然后再迁移。如果不是事务性的,我担心用户将拥有仅部分迁移的模式。
背景
用于调用的代码
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
当新的数据库模型存在时,它会失败,如预期的那样。以前会提示用户通过UIAlertView
更新数据库。然后将调用以下语句。
[persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:optionsDictionary error:&error]
如果initWithManagedObjectModel
失败,我决定运行第二行代码。不是那么愚蠢,除了这个语句在` - (NSPersistentStoreCoordinator *)persistentStoreCoordinator'方法中运行,所以应用程序现在有时会在启动时超时。
在这个阶段,我不知道该怎么做。数据库是半映射到新模型还是仍然代表以前的模型?
答案 0 :(得分:0)
核心数据迁移是事务性的,因为迁移是在内存中完成的,旧数据库在内存中完成后将替换为新版本。
因此,当从didFinishLaunchingWithOptions
方法中删除迁移过程时,解决了在启动时尝试迁移的超时问题。新的更新解决了那些与之前升级时间超时的人的问题。