Apple документация по -setPrimitiveValue:forKey:
является неопределенной двумя способами, когда используется для управления отношениями "многие-многие".
Сначала они заявляют:
Если вы попытаетесь установить отношение "ко многим" к новому объекту NSMutableSet, он (в конце концов) потерпит неудачу.
В конце концов?! Что это значит? Повредет ли он позже во время -[NSManagedObjectContext save:]
? Когда управляемый объект превращается в неисправность, а затем возвращается обратно? Когда? Могу ли я написать тестовый пример для последовательного воссоздания отказа по требованию?
Во-вторых, предоставляя пример кода для правильной обработки этого случая, они пишут:
сначала получите существующий набор, используя
primitiveValueForKey:
(убедитесь, что метод не возвращаетnil
)
Что делать, если/когда метод возвращает nil? assert()
он и немедленно сбой, потому что это означает, что весь граф объекта поврежден и сохранение приведет к потере данных? NSAssert()
на нем как предупреждение вызывающему, но нажмите (тихо ничего не делать)?
Прямо сейчас я просто прямо назначаю свой желаемый NS[Mutable]Set
в этом случае, например:
- (void)setChildren:(NSSet*)value_ {
NSMutableSet *mutableRelationshipSet = [[[self primitiveValueForKey:@"children"] mutableCopy] autorelease];
if (mutableRelationshipSet) {
[mutableRelationshipSet setSet:value_];
[self setPrimitiveValue:mutableRelationshipSet forKey:@"children"];
} else {
[self setPrimitiveValue:value_ forKey:@"children"];
}
}
Это неправильно?