Интересно, я сам слишком много делал и мог бы больше полагаться на CoreData. Предположим, у меня есть два управляемых объекта, Собака и Хвост, которые имеют отношение один к одному. У собаки есть отношения, хвост, это необязательно. Его обратное - владение собакой. Правило удаления из Собаки в Хвост является каскадным. Отношение tailingDog в Tail также необязательно. Его правило удаления равно нулю.
CoreData генерирует как tail, так и owningDog как сохраняющие свойства.
Что мне нужно сделать, чтобы минимально выполнить следующее?
- Переместите Хвост Собаки А в Собаку Б
- Удалить собаку A (без удаления нового хвоста собаки X).
Я делал что-то вроде этого, полностью написано для ясности
-(void)graftThenKill
{
Tail* tempTail = A.tail;
A.tail = nil; // releases X, sets relationship to nil so we can delete without cascading
B.tail = tempTail; // retains X, sets Tail's owningDog to B
[moc deleteObject:A]; // now we have his tail, don't need A
}
Могу ли я заменить это на
-(void)graft
{
A.tail.owningDog = B; // Makes A's tail nil, safe to delete A without deleting X?
[moc deleteObject:A];
}