我同意,我认为您应该使用核心数据连接到旧数据库并提取数据,然后将其移动到新数据库。完成后,您应该使用以下内容删除旧的数据库文件(注意我假设您将核心数据结果存储到 SQLite 中):
- (NSURL *)urlForDocumentsDirectoryWithFile:(NSString *)fileName {
NSURL *docPath = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
return [docPath URLByAppendingPathComponent:fileName];
}
- (void)deleteFileFromDocumentsIfExists:(NSString *)fileName {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSURL *filePath = [self urlForDocumentsDirectoryWithFile:fileName];
NSLog(@"Deleting file: %@", filePath.absoluteString);
if ([fileManager fileExistsAtPath:[filePath path]])
{
BOOL success = [fileManager removeItemAtURL:filePath error:&error];
if (!success) NSLog(@"Error: %@", [error localizedDescription]);
}
}
删除代码:
[self deleteFileFromDocumentsIfExists:@"MyOldDatabaseName.sqlite"];
如果您只使用一次旧的对象模型,我不会担心拥有 2 个对象模型......永远。我可以看到在您的应用程序中“使用一次”代码是一种浪费,但即使跳过核心数据并手动查询仍然需要您拥有它。
另外,我有一个 DataAccessManager 单元,我将所有核心数据的荒谬初始化代码转储到其中,这样我就可以轻松访问多个上下文,如果您担心您正在手动编写所有内容,您可能希望将其移动到一个可共享的单元。