迁移实体和父实体

时间:2011-05-25 19:09:01

标签: objective-c cocoa core-data core-data-migration

我有一个有两个属性的实体A.实体B将A作为父级,并具有另外3个属性。新版本中的更改不会影响实体A和B.

如何将实体B的对象迁移到我的数据模型的新版本,包括实体A的属性?

我尝试使用两个实体映射:一个用于A,一个用于B,但“A属性”不会迁移。或者,我会将A的属性添加到映射以迁移B,但是我无法选择正确的属性(在Xcode 4中)。


编辑:

我不是指两个实体之间的常规关系,而是继承: Image showing client and parent entity


编辑2:

可以肯定的是,我创建了一个要测试的新项目。在这里,我只添加了如上所示的两个实体。在我的awakeFromNib我做了一个获取请求,如果没有返回结果,我添加一个新实体:

    NSManagedObject *newAccount = [[NSManagedObject alloc] initWithEntity:entityDesc insertIntoManagedObjectContext:[self managedObjectContext]];

    // Account
    [newAccount setValue:@"TheName" forKey:@"name"];
    [newAccount setValue:[NSDecimalNumber decimalNumberWithMantissa:5 exponent:2 isNegative:NO] forKey:@"currentBalance"];

    // BankDebitAccount
    [newAccount setValue:@"TheAccountNumber" forKey:@"accountNumber"];
    [newAccount setValue:@"TheBankName" forKey:@"bankName"];
    [newAccount setValue:[NSDecimalNumber decimalNumberWithMantissa:6 exponent:1 isNegative:YES] forKey:@"openingBalance"];

在我的第二版数据模型中,我添加了一个新实体,并通过

启用了自动迁移
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:dict error:&error]) {

迁移确实发生了,并且成功迁移了BankDebitAccount的三个属性。来自Account的currentBalance属性重置为0,并且name属性在XML文件中不再可见(因此,等于nil)。


编辑3: 我刚尝试在Xcode 3(.2.4)中打开这个新制作的测试项目。当我在那里打开映射模型并选择我的子实体的映射时,我实际上可以为父的属性添加属性映射:

Child's entity mapping in Xcode 3

所以,我想这会让这个Xcode 4成为一个错误。

2 个答案:

答案 0 :(得分:1)

我不确定出了什么问题。

我刚创建了这个数据模型版本1,我希望这尽可能接近你的情况:

enter image description here

然后我创建了这个版本2,没有更改父和子只有一个新实体:

enter image description here

我创建了一个映射模型,这就是它自动建议的内容:

enter image description here

让我们来看看差异:

enter image description here

只有一个变化:新实体邻居。

你能发布一些你的情况吗?

注意这是XCode3

答案 1 :(得分:0)

原来这是我当时使用的Xcode版本中的一个错误,并在Xcode 4.2中得到了解决。