2012-12-31 20 views
0

更改后的代码并发布。现在,应用在启动时超时,同时将持久性商店协调员更新为新模型。想要知道迁移是否是事务性的,以便我可以制定如何解决问题。在超时之前迁移将通过迁移得到x%。核心数据(SQLite)手动迁移事务?

如果我只需要首先启动应用程序然后迁移事务。如果不是事务性的,我担心用户将只有部分迁移的模式。

背景

代码用来调用

persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

当数据库的新模式存在,预期它会失败。以前用户将被提示通过UIAlertView更新数据库。然后将会调用以下语句。

[persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:optionsDictionary error:&error] 

如果initWithManagedObjectModel失败,我决定运行第二行代码。除了这个语句在` - (NSPersistentStoreCoordinator *)persistentStoreCoordinator'方法中运行外,并不那么愚蠢,所以有时候应用程序在启动时会超时。

在这个阶段我不知道该怎么做。数据库是半映射到新模型还是仍然代表以前的模型?

回答

0

核心数据迁移是事务性的,即迁移在内存中完成,旧数据库在内存中被替换为新版本,一旦完成。

因此,在启动时试图迁移的超时问题在从didFinishLaunchingWithOptions方法中删除迁移过程时得到解决。新的更新解决了那些在以前的升级中超时的人的问题。