数据模型 -> 添加模型版本。我-6ren">
gpt4 book ai didi

iphone - 核心数据迁移 "can' t 将模型与名为 'foo' 的两个不同实体合并”

转载 作者:行者123 更新时间:2023-12-03 20:35:26 24 4
gpt4 key购买 nike

我知道这是一个常见问题,但是我找到的解决方案似乎都不适合我。

这是我的情况:我的应用程序有一个数据模型,我想为其添加版本控制。所以在 XCode 中,我做了设计 -> 数据模型 -> 添加模型版本。我还更新了我的委托(delegate)的 persistenceStoreCoordinator 方法,如下所示:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"foo.sqlite"]];

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
/*Error for store creation should be handled in here*/
}

return persistentStoreCoordinator;
}

为了确保一切仍然正常工作,我进行了全部清理、构建并在模拟器中进行了测试。到目前为止一切正常。

接下来,我选择了新版本数据模型,使用 XCode 将其设置为当前版本,并向实体添加了一个额外属性。然后我做了一个干净的一切,构建。现在,每当我启动应用程序时,它就会崩溃并出现以下错误:“无法将模型与名为“foo”的两个不同实体合并”。

我做错了什么?我尝试确保没有数据模型添加到目标,仅将当前版本的数据模型添加到目标,以及两者。每次测试时我都会确保清理所有内容。

谁能解释一下为什么它对我不起作用?

编辑:

这是我的 ManagedObjectModel 方法:

- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

return managedObjectModel;
}

最佳答案

我已经预料到了 ManagedObjectModel getter 的实现。

在您的实现中, bundle 中的所有模型都将合并为一个模型。因此,.momd 中的所有版本也会合并,从而导致重复的实体定义。

更改代码以使用适当的模型文件显式初始化模型,它应该可以正常工作。

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"datamodel" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

关于iphone - 核心数据迁移 "can' t 将模型与名为 'foo' 的两个不同实体合并”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3773915/

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