2014-11-02 81 views
1

我想创建一个子对象,并通过将父对象分配给子对象中的关系将其连接到它的父对象。我使用此代码:分配给核心数据对象中的关系似乎破坏对象

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行,对象会被保存,但是会作为孤儿。

我在做什么错?

回答

0

它看起来像你正在做的是分配完全错误的关系的ID值。

核心数据不是数据库。您不管理将对象与对方关联的表。您将对象设置为其他对象关系。我建议你多学习一下Core Data Relationships。

此外,请尝试使用自己的ManagedObject子类;它消除了所有直接KVC访问属性,并且在眼睛上更容易一些。一旦您更熟悉Core Data,我会建议您使用mogenerator

+0

谢谢! 35年的SQL给了我一定的范式僵化!事实上,我只需要在这里更换一行代码,另一个代码存储对象而不是对象ID,这一切都会突然变为现实。再次感谢。 – Nick 2014-11-03 11:01:20