gpt4 book ai didi

iphone - 如何使 iPhone 应用程序能够容忍 CoreData 架构更改

转载 作者:行者123 更新时间:2023-12-03 19:37:19 25 4
gpt4 key购买 nike

我有一个广泛使用 CoreData API 的应用程序。我正在开发一个更新版本,向实体添加一些字段。由于架构更改,我的应用程序在加载时崩溃(除非我清除私有(private)存储并重新启动)。

问题是当客户升级到新版本时,我不介意在应用程序第一次加载时对其数据运行升级过程,但我什至无法加载它,因为 CoreData 不喜欢这样架构发生变化。

有什么方法可以告诉 CoreData“没关系..不用担心架构更改”?因为我只添加了字段,没有重命名或删除任何内容。

最佳答案

您可能应该获得一本 Marcus Zarra 的《Core Data》书并阅读有关迁移的内容(第 5 章)。但是,如果做不到这一点,有一些基础知识是值得了解的。首先,您更新的应用程序中需要旧模型(架构)和新模型。其次,您需要确保新模型被标记为“当前模型”。第三,您需要确保创建 NSPersistentStoreCoordinator 的方式能够自动从现有模型(从磁盘加载)映射到新模型。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator)
return persistentStoreCoordinator;

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyDataStore.sqlite"]];

NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

// Use mapping model
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];


if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:options
error:&error])
{
[NSApp presentError:error];
}
return persistentStoreCoordinator;
}

更新新应用中的旧模型需要与旧应用中的模型完全相同。如果您不确定情况是否如此,则可以采取一些步骤来确定。我这样做的方式有点复杂 - 但如果/当您认为这会有所帮助时,我会概述它。

关于iphone - 如何使 iPhone 应用程序能够容忍 CoreData 架构更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4732526/

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