Предисловие:
У меня есть две сущности, определенные как отношение один-ко-многим: A << -------> B. Отношение B к A называется myAs и является отношением ко-многим с Nullify в качестве правила удаления. , Обратное отношение от А к В является отношением «один к одному» с Каскадом в качестве правила удаления.
Я реализовал validateForDelete для класса B следующим образом:
- (BOOL)validateForDelete:(NSError **)error {
[super validateForDelete:error];
BOOL validDelete = FALSE;
if ([self.myAs count] == 0) {
validDelete = TRUE;
}
return validDelete;
}
Цель этого состоит в том, чтобы удалить объект B, только если с ним больше нет объектов A (но всегда удаляйте объект B, если с ним больше нет объектов A). Этот validateForDelete работает, как и предполагалось, если я проверяю эту проверку вручную перед сохранением: при удалении объекта B:
if ([b validateForDelete:NULL]) {
//delete b object...
[context save:&error];
...
}
Проблема, с которой я столкнулся, заключается в том, что удаление объекта B каскадно удаляется из удаления объекта A. Пользователи не будут иметь доступа к объектам B напрямую - они создаются и удаляются через объекты A. Поэтому мое правило, что объекты B должны быть удалены, когда больше нет объекта A, связанного с ним, должно быть применено к объекту A - следовательно, каскад при удалении.
Проблема в том, что когда я удаляю объект A, validateForDelete вызывается для объекта B из-за каскада. Я получаю исправленную ошибку: Неразрешенная ошибка (ноль), (ноль), потому что я не вызываю validateForDelete вручную.
Вопрос (ы):
Как получить доступ к вызову validateForDelete из каскадного удаления программным образом, чтобы я мог передать переменную ошибки и / или обработать результат validateForDelete для FALSE?
Если вышесказанное невозможно, как мне поступить с этим вариантом использования? Есть ли еще более практичный способ достижения этого?
Заранее спасибо.