分配核心数据对象中的关系似乎会破坏对象

时间:2014-11-02 23:43:59

标签: ios objective-c core-data

我正在尝试通过将父ID分配给子对象中的关系来创建子对象并将其连接到其父对象。我使用这段代码:

    Serial *object = [NSEntityDescription insertNewObjectForEntityForName:@"Serial" inManagedObjectContext:AppDelegatePtr.managedObjectContext];
    NSLog(@"context is %@", object.managedObjectContext);
    [object setValue:self.textNarrative.text forKey:@"narrative"];
    NSLog(@"%@",[[SMNetworkModel sharedInstance ] selectedExerciseID]);
    [object setInExercise:(Exercise *)[[SMNetworkModel sharedInstance ] selectedExerciseID]];
    NSError *error;
    if (![AppDelegatePtr.managedObjectContext save:&error])
    {
        NSLog(@"Failed to save - error: %@", [error localizedDescription]);
    }

但是,它提供了以下调试/错误:

2014-11-02 23:36:49.622 RVP[4464:139260] context is <NSManagedObjectContext: 0x7faf19fa1140>
2014-11-02 23:36:49.623 RVP[4464:139260] 0xd000000000040000 <x-coredata://D08DF3CD-A5E0-4445-B7C4-A84448110BDA/Exercise/p1>
2014-11-02 23:36:49.623 RVP[4464:139260] -[_NSCoreDataTaggedObjectID managedObjectContext]: unrecognized selector sent to instance 0xd000000000040000

错误在上面代码的第5行生成。似乎父对象id(如在调试中)以某种方式覆盖了托管实体对象中的托管对象上下文属性。这种关系在这个实体中是一对一的,在反向中是一对多的。如果我将其更改为1:1反向,它不会影响错误。如果我注释掉第5行,对象就会被保存,但作为一个孤儿。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您正在做的是分配关系的ID值,这是完全错误的。

核心数据不是数据库。您不管理将对象关联到彼此的表。您将对象设置为其他对象关系。我建议你更多地研究核心数据关系。

另外,尝试使用自己的ManagedObject子类;它取消了所有直接的KVC访问属性,并且在眼睛上更容易一些。一旦你对Core Data感到满意,我建议你使用mogenerator