Основные данные `deleteObject:` проблема! - PullRequest
1 голос
/ 12 апреля 2011

У меня есть следующие объекты в основных данных, как показано на рисунке ниже. Core Data Model

Правило удаления для всех отношений - каскадное.

Вопросы: Всякий раз, когда я удаляю любой объект-сущность на уровне 2 и выполняю [context save:&error];, все остальные объекты в таблице Entity1 получают ошибку данных, и приложение вылетает из-за невозможности больше читать объект Entity1, что приводит к ошибке EXC_BAD_ACCESS .

Я использую этот код

for(Entity1 *entity in listOfEntitys)
{
    if(entity.Relation1)
        [context deleteObject:entity.Relation1];

    if(entity.Relation2)
        [context deleteObject:entity.Relation2];

    if(entity.Relation3)
        [context deleteObject:entity.Relation3];
}
[context save:&error];

Не то чтобы я никогда не удалял объекты из основных данных, но это единственное место, где возникает проблема. Может ли кто-нибудь помочь.

Спасибо.
PS. Я видел другие вопросы по SO, но ни один не имеет такой ситуации, как я.

Edit:

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

Printing description of listOfEntitys: 
(
    "<Entity1: 0x4dc3d80> (entity: Entity1; id: 0x4dc2d60 <x-coredata://DF11191D-0BE9-4A63-955D-0A43153290A4/Entity1/p5> ; data: <fault>)",
    "<Entity1: 0x5b06ea0> (entity: Entity1; id: 0x5b077d0 <x-coredata://DF11191D-0BE9-4A63-955D-0A43153290A4/Entity1/p6> ; data: <fault>)",
    "<Entity1: 0x4dc2cf0> (entity: Entity1; id: 0x4dc2df0 <x-coredata://DF11191D-0BE9-4A63-955D-0A43153290A4/Entity1/p7> ; data: <fault>)",
    "<Entity1: 0x4dc2b80> (entity: Entity1; id: 0x4dc3640 <x-coredata://DF11191D-0BE9-4A63-955D-0A43153290A4/Entity1/p8> ; data: <fault>)" 
)

Ответы [ 2 ]

6 голосов
/ 12 апреля 2011

Из Руководство по программированию основных данных

Если правило удаления отношения Каскад, затем удаление одного объекта может привести к удалению других.

Если вы не хотите, чтобы связанные объекты удалялись при удалении данного объекта, тогда правило удаления для этих отношений должно быть чем-то иным, чем «каскад». Вы, вероятно, хотите вместо этого «обнулить».

3 голосов
/ 12 апреля 2011

Не устанавливайте инверсии каскадно, потому что это похоже на светящийся предохранитель, сгорающий во всех направлениях.Установите их, чтобы обнулить.

...