gpt4 book ai didi

iphone - 核心数据迁移 : How to delete the Core Data stack?

转载 作者:技术小花猫 更新时间:2023-10-29 10:34:48 25 4
gpt4 key购买 nike

我的计划是删除旧的核心数据堆栈(NSManagedObjectModel .momd 文件和NSPersistentStore .sqlite文件)因为:

  • 我没有 Core Data 迁移方面的经验。
  • 新的 .xcdatamodel 架构与旧架构完全不同。
  • 我可以安全地删除用户的旧数据,因为它们都存储在我们的服务器上,而新应用程序无论如何都会从我们的服务器下载最新数据。

在这种情况下,完全删除是进行迁移的最佳方式吗?

最佳答案

如果您的应用无论如何都需要访问互联网,那么这样做是完全有效的。否则,用户可能会得到一个空数据集(当您发现旧数据库与当前模型不兼容时,您会删除它,但如果不访问服务器就无法重新填充它)。

从技术上讲,这是一件微不足道的事情。当您设置 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];

关于iphone - 核心数据迁移 : How to delete the Core Data stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com