#objective-c #cocoa #core-data
#objective-c #cocoa #core-data
Вопрос:
Если мне нужно программно очистить NSSet, автоматически созданный Core Data (множественные взаимосвязи), что мне следует делать? Что — то вроде этого ?
[self willChangeValueForKey:@"MyRelationship"];
[[self MyRelationship] release];
[self MyRelationship] = [NSSet alloc] init];
[self didChangeValueForKey:@"MyRelationship"];
Не уверен, что это вообще правильно…
Спасибо
Ответ №1:
[[self mutableSetValueForKey:@"MyRelationship"] removeAllObjects];
По какой-то причине я никогда не могу заставить работать правило «каскадного» удаления, поэтому, когда я хочу, чтобы объекты также были удалены, мне приходится выполнять итерации по набору и вызывать [self.managedObjectContext deleteObject:obj]
иначе я получу ошибки проверки, если взаимосвязь определена как требуется.
Комментарии:
1. Спасибо, последний комментарий очень помог
Ответ №2:
Патрик,
Неудивительно, что отношения в Core Data являются особыми. Они предоставляют некоторые специализированные методы для удаления объектов из этих связей. Вместо того, чтобы пытаться переопределить средства доступа, вам следует использовать эти методы. Как в этом фрагменте:
[self removeMyRelationship: self.myRelationship];
Я также думаю, что вам следует удалить переопределенные методы доступа.
Я не понимаю вашу проблему с удалением. Я рекомендую вам просто выполнить итерацию по группе и удалить объекты. Я думаю, важно, чтобы ваш перечислитель был копией вашего отношения. Как в следующем коде ARC:
for (Relation *r in [self.myRelationship copy]) {
[moc deleteObject: r];
}
Эндрю