如果您的应用程序需要互联网访问,这是完全有效的事情。否则,用户可能会留下一个空数据集(当您发现它与当前模型不兼容时删除旧数据库,但如果不访问服务器则无法重新填充它)。
从技术上讲,这是一件微不足道的事情。当你设置 NSPersistentStoreCoordinator :
NSPersistentStoreCoordinator
NSURL *storeURL = ...; NSManagedObjectModel *managedObjectModel = ...; NSError *error = nil; _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel]; // Check if we already have a persistent store if ( [[NSFileManager defaultManager] fileExistsAtPath: [storeURL path]] ) { NSDictionary *existingPersistentStoreMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType URL: storeURL error: &error]; if ( !existingPersistentStoreMetadata ) { // Something *really* bad has happened to the persistent store [NSException raise: NSInternalInconsistencyException format: @"Failed to read metadata for persistent store %@: %@", storeURL, error]; } if ( ![managedObjectModel isConfiguration: nil compatibleWithStoreMetadata: existingPersistentStoreMetadata] ) { if ( ![[NSFileManager defaultManager] removeItemAtURL: storeURL error: &error] ) NSLog(@"*** Could not delete persistent store, %@", error); } // else the existing persistent store is compatible with the current model - nice! } // else no database file yet [_persistentStoreCoordinator addPersistentStoreWithType: NSSQLiteStoreType configuration: nil URL: storeURL options: nil error: &error];
如果您创建一个空白的Core Data应用程序,您可以在Application Delegate中的Apples注释中找到所需的代码:
如果您在开发过程中遇到架构不兼容错误,那么您 可以减少他们的频率: 只需删除现有商店:[[NSFileManager defaultManager] removeItemAtURL:storeURL错误:nil] 通过传递以下字典作为选项来执行自动轻量级迁移 参数:@ {NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} 轻量级迁移仅适用于一组有限的架构更改;请参阅“核心数据模型版本控制和数据迁移” 编程指南“了解详情。
如果您在开发过程中遇到架构不兼容错误,那么您 可以减少他们的频率:
只需删除现有商店:[[NSFileManager defaultManager] removeItemAtURL:storeURL错误:nil]
通过传递以下字典作为选项来执行自动轻量级迁移 参数:@ {NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} 轻量级迁移仅适用于一组有限的架构更改;请参阅“核心数据模型版本控制和数据迁移” 编程指南“了解详情。