2015-02-12 53 views
1

我对商店的应用程序,它指向文档directory.Here的旧代码的appname.sqlite文件:预先填充应用程序包中的sqlite文件。现有用户更新后会发生什么?

NSURL *storeURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"MyApp.sqlite"]; 

NSError *error = nil; 

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

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption : @YES,NSInferMappingModelAutomaticallyOption : @YES}; error:&error]) { 

    abort(); 
} 

我现在想给更新。这一新功能是一个预充式.sqlite数据库,其中有在bundle.See以下

NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"MyNewPrefilled" ofType:@"sqlite"]]; 

它的工作确定对新安装的app.But会发生什么谁已经登录,并有一个用户很多保存在数据库中的数据(应用程序目录中的旧sqlite)?我会失去它,因为我现在指向应用程序包(MyNewPrefilled.sqlite)中的.sqlite,而不是应用程序目录中的.sqlite。我怎样才能从旧版doc目录的sqlite文件中将旧数据恢复到捆绑中的新数据?我使用代码数据迁移(涉及数据模型中的版本号),当我更新数据模型时,它可以正常工作。

+0

是要复制静态数据的数据吗?或者用户会改变它? – Mundi 2015-02-12 21:20:20

+0

请注意,包中的文件是只读的。 – 2015-02-13 01:22:31

回答

0

Apple建议使用两个持久性存储(在同一模型中)来分隔用户生成的数据和静态数据。据推测,如果你的数据是静态的,你应该做到这一点,并有一个静态数据的只读存储。请参阅核心数据编程指南中的Configurations

另一种方法是

  1. 到包种子数据库复制到文档目录,然后
  2. 从老店读取数据,并
  3. 将其复制到新的一个。
  4. 最后,您可以删除旧的商店。
+0

是的,我的数据是静态的。只读。 – frigocat 2015-02-14 06:37:51

+0

我一直在考虑从旧商店读取数据并复制到新问题中。这正是我发布的问题。 我的问题:我该怎么做?我如何“从旧商店读取数据并将其复制到新商店”? – frigocat 2015-02-14 06:40:06

+0

只需从旧商店获取所有内容,循环查看结果,将具有相同数据的新实体插入新商店。 – Mundi 2015-02-14 07:02:35

相关问题