我的应用程序目前有这个sqlite文件(让我们将其命名为v1) 我想要做的是,当我激活IBAction时,它会自动删除当前文件(v1)并从webservice中检索值并存储在新文件(v2)中,然后应用程序将使用新的sqlite文件(v2)
关于如何实施的任何想法?
我目前的代码在这里:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"test.sqlite"]];
NSLog(@"%@",storeUrl);
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
答案 0 :(得分:5)
你可以:
但是这种方法非常危险,因为您必须确保应用中的每个Core Data对象都可以重置。此外,更换数据库应该在重置上下文后发生,以避免竞争条件。如果你有线程/块访问Core Data,那就更难了。
更好的方法可能是通过下载包含新数据库内容的JSON文件来更新数据库记录,删除旧记录并插入新记录。这还可以确保您可以在未来版本的应用程序中更新Core Data架构,而不会破坏内容更新过程。通过使用NSFetchResultsController
类,您的表视图或其他UI元素甚至可以在数据库更新时使用漂亮的动画自动更新。
如果你关心带宽,我会使用protocol buffers,它比任何JSON甚至sqlite文件更紧凑,而且非常容易使用。