2013-11-16 4 views
1

У меня есть следующие объекты и отношения:Как правильно удалить NSManagedObject отношения

Entity0, EntityA, EntityB, EntityC

Entity0 может иметь 0 или много EntityA (s). EntityA имеет взаимно однозначное отношение «entityB» с EntityB (обратным является «itemB»). EntityC имеет отношение «многие ко многим» «entityBs» с EntityB (обратным является «itemCs»). Правило удаления для всех отношений - «Nullify».

Я создал один EntityA и связал его с EntityB. Затем я создал один EntityC и связал его с EntityB.

Во время удаления из EntityA, я делаю это ...

self.entityA.entityB = nil; 
[self.entity0 removeEntityAObject:self.entityA]; 

Теперь я ожидал «entityBs», привязанный к EntityC будет удален, а также. Однако, когда я пытался получить подробную информацию о «entityBs» от EntityC

NSLog(@"details %@", self.entityC.entityBs); 

Я получил эту ошибку на первом вызове:

entityBs = "<relationship fault: 0x1557abb0 'entityBs'>"; 

Затем я нажимаю кнопку назад и выберите снова EntityC для получения детали еще раз. Тогда я получил это:

entityBs =  (
    "0x1669b8b0 <x-coredata://12REF41B-4A7D-4A51-B6BC-2RHRI5DC3124/EntityB/p22>" 
); 
status = 0; 
}) with objects {(
<EntityB: 0x166ac100> (entity: EntityB; id: 0x1669b8b0 <x-coredata://12REF41B-4A7D-4A51-B6BC-2RHRI5DC3124/EntityB/p22> ; data: <fault>) 

Это как если бы сущностьB все еще существует. Как правильно выполнить удаление?

ответ

3

Объект B все еще существует, потому что вы установили правила удаления для аннулирования (и вы фактически ничего не удалили, вы просто удалили ссылку). Для того, чтобы иметь B объект удален вам нужно будет сделать 3 вещи:

  1. Установите правило удаления для отношений от А до В каскад
  2. Не nil ссылка на B (от A)
  3. На самом деле удалить A из контекста
+0

Для # 3, вы имеете в виду делать [self.entity0 removeEntityAObject: self.entityA]; и вызывать [self.managedObjectContext save: & error] недостаточно, чтобы удалить сущностьA из контекста? ... тогда как я должен удалить entityA из контекста? – iPhoneJavaDev

+0

или до того, как я позвоню на сохранение, мне нужно специально удалить entityA из контекста ... [self.managedObjectContext deleteObject: self.entityA] ;? – iPhoneJavaDev

+0

Вам нужно вызвать 'deleteObject:' – Wain

Смежные вопросы