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

Posted

技术标签:

【中文标题】保存到与核心数据的许多关系时出错【英文标题】:Error saving to many relationship to core data 【发布时间】:2012-02-09 10:13:32 【问题描述】:

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

我有两个由 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] 保存组错误 ********** em>******* Error Domain=NSCocoaErrorDomain Code=134030 "无法进行操作 完全的。 (可可错误 134030。)“用户信息 = 0x85e0ab0 NSAffectedObjectsErrorKey=( "(实体:组;ID:0x838d020;数据: \n groupContacts = nil;\n groupId = 0;\n groupName = Some Name;\n)" ), NSUnderlyingException=无法更新之前的对象 从未插入。, NSAffectedObjectsErrorKey = ( "(实体:组;ID:0x838d020;数据: \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】:

您是否尝试过保存scratchPadContext之前将联系人添加到组(即创建localGroup 对象,保存上下文,然后添加联系人,并再次保存上下文? 从错误消息来看,Core Data 似乎在发送必要的插入之前向永久存储发送了一条更新语句,所以它可能会被绊倒,因为您正在向同时永久存储。

【讨论】:

以上是关于保存到与核心数据的许多关系时出错的主要内容,如果未能解决你的问题,请参考以下文章

保存具有多个不同关系的相同类型的各种核心数据实体?

如何使用 Objective-C 将一对多关系数据保存到核心数据中

iphone, 以多对多关系保存数据, 核心数据

关系保存时核心数据崩溃

核心数据关系在删除后导致保存错误

对许多实体和实体关系进行过滤的核心数据提取