gpt4 book ai didi

ios - 核心数据 - 轻量级迁移和多个核心数据模型文件(xcdatamodel)

转载 作者:IT王子 更新时间:2023-10-29 08:15:15 26 4
gpt4 key购买 nike

从由两个单独的 xcdatamodel 文件定义的存储区迁移时,我在执行轻量级迁移时遇到问题。

在我的应用程序的 1.0 版中,我将模型分解为分析模型、模型 A 以及模型 B 中的所有其他内容。编译时,模型会被组合在一起,一切顺利。

在处理新版本 1.1 时,我通过向模型 B 添加新模型版本并将该新版本设置为事件来升级模型 B。

从 1.0 升级到 1.1 时会出现此问题。似乎 Core Data 检查磁盘上的模型存储(由 1.0 版创建)并寻找描述它的模型但无法找到定义整个存储的单一模型(模型 A 仅涵盖分析,模型 B 涵盖其他所有内容),因此它会引发“找不到源存储模型”错误。

有没有人找到一种解决方案来分离模型,但仍然允许升级 + 轻量级迁移工作,而无需定义自定义迁移的额外麻烦?

这是用于加载模型的代码片段:

    NSArray *modelNames = [NSArray arrayWithObjects:@"model-A", @"model-B", nil];
NSMutableArray *models = [NSMutableArray array];
for (NSString *name in modelNames)
{
LogInfo(@"loading model %@", name);
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"momd"];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease];
[models addObject:model];
}

// combine all the separate models into one big one
objectModel = [[NSManagedObjectModel modelByMergingModels:models] retain];

NSURL *documentsDirectory = [NSURL fileURLWithPath:[SuperFileManager documentsDirectory] isDirectory:YES];
NSURL *storeURL = [documentsDirectory URLByAppendingPathComponent:@"database.sqlite"];
NSError *error = nil;

coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];

if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:options
error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

最佳答案

参加 WWDC 2012 实验室并与核心数据团队会面后,您似乎被迫将所有模型信息放在一个 xcdatamodel 中。 CoreData 不够智能,无法将其现有存储作为创建它且仍在磁盘上的存储的组合进行检查。正如 C. Roald 指出的那样,您可以对旧的 xcdatamodel 文件进行一些处理,但令人遗憾的是 Core Data 没有更优雅地处理这个问题。

关于ios - 核心数据 - 轻量级迁移和多个核心数据模型文件(xcdatamodel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10940545/

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