Ошибка сохранения во многих отношениях с основными данными - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь разобраться с основными данными, и я пытаюсь реализовать небольшое отношение ко многим, но я продолжаю получать ошибку ниже:

У меня есть два класса NSManagedObject (Группы и Контакты)созданный моделью данных Xcode с отношением ко многим.

@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 Code = 134030 "Операция не может быть завершена. (Ошибка какао 134030.)" UserInfo = 0x85e0ab0 {NSActedObjectsErrorKey = ("(entity:Groups; id: 0x838d020; data: {\ n groupContacts = nil; \ n groupId = 0; \ n groupName = Some Name; \ n}) "), NSUnderlyingException = Невозможно обновить объект, который никогда не был вставлен.}, {NSActedObjectsErrorKey =("(объект: Группы; id: 0x838d020; данные: {\ n groupContacts = nil; \ n groupId = 0; \ n groupName = Some Name; \ 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 Ответ

1 голос
/ 09 марта 2012

Вы пытались сохранить scratchPadContext до , добавив контакты в группу (то есть, создав объект localGroup, сохранив контекст, затем добавив контакты и снова сохранив контекст? Из сообщения об ошибке похоже, что Core Data отправляет оператор обновления в постоянное хранилище, прежде чем отправит необходимую вставку, поэтому может произойти сбой, потому что вы записываете оба конца нового отношения ко многим в постоянный хранить в то же время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...