保存到与核心数据的许多关系时出错

时间:2012-02-09 10:13:33

标签: core-data ios5

我正试图了解核心数据,我正在努力实现一个小到多的关系,但我不断收到以下错误:

我有两个由Xcode的数据模型创建的具有多对多关系的NSManagedObject类(组和联系人)。

@implementation Groups
@dynamic groupId;
@dynamic groupName;
@dynamic groupContacts;
@end

@implementation Contacts
@dynamic firstName;
@dynamic lastName;
@dynamic userId;
@dynamic belongsToGroup;

我将联系人数据作为字典数组,我正在执行以下操作:

self.localGroup = [NSEntityDescription insertNewObjectForEntityForName:@"Groups" inManagedObjectContext:self.scratchPadContext];
self.localGroup.groupName = @"Some Name";

    for (int i = 0; i < [self.ContactsData count]; i++) {
        Contacts *contact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:self.scratchPadContext];        
        NSDictionary *obj = (NSDictionary *)[self.ContactsData objectAtIndex:i];

        contact.firstName = [obj valueForKey:@"firstName"];
        contact.userId = [obj valueForKey:@"email"];

        [self.localGroup addGroupContactsObject:contact];
    }

    if (![self.scratchPadContext save:&error]) {
        NSLog(@"Errror saving Group ********************************* %@, %@", error, [error userInfo]);
    }

我收到以下错误:

  

[4459:15503]错误保存组 * ** * ** * ** * ** * ** * *   错误域= NSCocoaErrorDomain代码= 134030“操作不能   完成。 (可可错误134030.)“UserInfo = 0x85e0ab0   {NSAffectedObjectsErrorKey =(       “(entity:Groups; id:0x838d020; data:   {\ n groupContacts = nil; \ n groupId = 0; \ n groupName = Some   名称; \ n})“),NSUnderlyingException =无法更新对象   从未插入。},{       NSAffectedObjectsErrorKey =(           “(entity:Groups; id:0x838d020; data:   {\ n groupContacts = nil; \ n groupId = 0; \ n groupName = Some   名称; \ n})”       );       NSUnderlyingException =“无法更新从未插入的对象。”; }

如果我注释掉关系部分并只保存组名,则可以正常工作。所以,我想问题是关系数据,但我无法弄清楚是什么。任何人都可以指出我可以做错的地方吗?

[编辑]:

当我添加

contact.belongsToGroup = self.localGroup;

即使我使用一个MOC,我也会收到以下错误。我无法理解错误在哪里。如果有人能对此有所了解,我将不胜感激。

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'belongsToGroup' between objects in different contexts (source = <Contacts: 0x86926a0> (entity: Contacts; id: 0x8692700 <x-coredata:///Contacts/t2548922E-A0C6-4E3C-9760-3265954764E73> ;

1 个答案:

答案 0 :(得分:1)

您是否尝试在添加联系人之前保存scratchPadContext (即创建localGroup对象,保存上下文,然后添加联系人,以及再次保存上下文?从错误消息中,看起来Core Data在发送必要的插入之前正在向永久存储发送更新语句,因此它可能会被绊倒,因为您正在编写新的两端 - 与此同时与永久商店有很多关系。