Нужно ли мне вручную устанавливать инверсию основного объекта данных Связь в коде на iPhone

Я плохо знаком с основными данными, поэтому, пожалуйста, извините, если я неправильно понял некоторые термины.

У меня есть несколько объектов в моем файле xcdatamodel. Все они взаимосвязаны отношениями и обратными отношениями. Если я соединю два из этих объектов с помощью следующего кода, обратная связь не будет установлена.

[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"]; 

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

[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"];
[managedObj2 setValue: managedObj1 forKey:@"inverseRelatiohipName"];

Это кажется мне неправильным, но это единственный способ. может показаться, что механизм заработал. Я посмотрел на базу данных sqlite после запуска первого блока кода, и обратная связь не заполнена, но если я запустил второй код, связь будет.

Кроме того, похоже, что как только я создаю объект в Core Data После этого я не могу это изменить. ДП остается прежним. Как только я выхожу из приложения и перезапускаю его, я, кажется, теряю все отношения и атрибуты объекта. результирующие объекты в моем коде не имеют ничего, кроме nil переменных-членов.

РЕДАКТИРОВАТЬ:

Закомментированный материал - это то, как это было сделано раньше, а раскомментированный материал - это то, как я делаю это сейчас безуспешно.

] Здесь я создаю объекты:

NSEntityDescription* mobileEntity = [NSEntityDescription entityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];
WebServiceAuthService_mobileAdvertisementVO *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mobileEntity name] inManagedObjectContext:managedObjectContext];
//WebServiceAuthService_mobileAdvertisementVO *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];    

Здесь я назначаю одну из переменных-членов объекта:

[self setValue:newChild forKey:@"advertisement"];
            //self.advertisement = newChild;

Здесь я сохраняю контекст:

NSError *error = nil;
if (managedObjectContext != nil) 
{
    if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) 
    {
        DLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

}
5
задан iHorse 15 July 2011 в 18:24
поделиться