Удаление базового объекта данных в 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];
}];