Удалить базовый экземпляр объекта данных - должны ли отношения быть действительно равными nil? - PullRequest
6 голосов
/ 01 апреля 2012

Удаление базового объекта данных в iOS - действительно распространенная задача, я бы сказал. Но у него есть общая проблема, которую я просто не могу понять сам: если у экземпляра установлены отношения, удаление завершается неудачно с NSValidationRelationshipDeniedDeleteError (1600). Это имеет место, даже если все отношения, включая обратные, установлены на «необязательные». Документация Apple гласит , этот код ошибки означает, что «некоторые отношения с правилом удаления NSDeleteRuleDeny не являются пустыми». Это не тот случай здесь; все отношения имеют правило удаления "обнулить".

Я даже попробовал с самым простым отношением, которое я мог придумать, используя пример сотрудников и отдела документации Apple. Я могу удалить сотрудника, если у него нет набора отделов.

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

Мой вопрос: это действительно распространенная практика? Как это имеет смысл? Что все остальные делают для удаления объектов Core Data с отношениями?

PS: Если кому-то интересно, это мой код, чтобы очистить отношения; entityInstance - это экземпляр, который нужно удалить. Код является общим для моего приложения, то есть он очищает все отношения сущности, которую нужно удалить:

NSEntityDescription *ed = entityInstance.entity;
NSDictionary *relations = [ed relationshipsByName];
NSArray *keys = [relations allKeys];
[keys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  [entityInstance setValue:nil forKey:(NSString*) obj];
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...