【问题标题】:How to Restore SQLite Database from Backup after Core Data model has changed (lightweight migration)Core Data 模型更改后如何从备份中恢复 SQLite 数据库(轻量级迁移)
【发布时间】:2012-09-13 00:32:50
【问题描述】:

我有一个核心数据应用程序,它将其 sqlite 数据库备份到 Dropbox,用户可以在需要时通过覆盖当前数据库来恢复它。

在下一个应用版本中,核心数据模型发生了变化,现有用户的数据库将通过轻量级迁移过程自动更新。

我担心已经备份的数据库。如果用户去恢复迁移前备份的 sqlite 数据库,它将与最新的模型不匹配,并且会导致应用崩溃。

有什么方法可以在恢复过程中更新数据库,以匹配我的核心数据模型?是我可以运行的进程,还是我可以采取的一些步骤来确保备份不会丢失?

【问题讨论】:

  • 这对我来说仍然是个问题。我担心我的用户会尝试下载他们的旧 SQLite 文件,并且当他们被告知需要首先创建新备份时会生气。谁能帮忙解决这个问题?
  • 我正在尝试解决同样的问题...你有没有为此想出解决方案?
  • 是的,实际上我只是在轻量级迁移完成后恢复了数据库(如下所述),一切正常。我很高兴很惊讶。你试过了吗?
  • Brilliant - 比我想象的要好得多,只需要在重新创建持久存储时设置一些选项。感谢您的快速回复,让我意识到问题比听起来简单!

标签: iphone sqlite core-data migration restore


【解决方案1】:

如果您打开包含核心数据的 sqlite 数据库,轻量级迁移确实会自动发生。主要是作为应用程序更新的一部分,也可以在您打开恢复的数据库时使用。

您可以添加检查以查看还原后是否需要迁移:

-(BOOL) storeRequiresMigration: (NSURL *) storeURL {
NSError *error = nil;
NSPersistentStoreCoordinator * temporaryPersistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

//Check if migration is needed
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:storeURL error:&error];
NSManagedObjectModel *destinationModel = [temporaryPersistentStoreCoordinator managedObjectModel];
BOOL isCompatibile = [destinationModel isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata];
NSLog(@"Store requires migration: %d", !isCompatibile);
return !isCompatibile;

}

【讨论】:

    【解决方案2】:

    只要您在应用程序中保留以前的数据模型版本,轻量级迁移就应该为您处理这个过程。从您的问题来看,我相信这正是轻量级迁移所需要的。它推断以前数据模型版本的变化并将旧数据映射到新数据模型中

    在您希望重命名数据模型中的某些内容的特殊情况下,您可以使用位于检查器中“版本控制”下的重命名 ID 来执行此操作。

    【讨论】:

    • 感谢 bbodayle,但要澄清一下:用户将手动恢复 sqlite 数据库,将其替换为从 Dropbox 下载的数据库。然后,我根据新下载的数据库采取措施重置数据。在此过程中不会自动发生任何事情 - 这里不会发生轻量级迁移。轻量级迁移仅在用户更新应用程序时发生。因此,在这种情况下,用户有一个数据已迁移的应用程序,并试图用旧版本的数据库替换更新的数据库。
    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 2012-04-05
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多