Очистка базового набора данных (множественные взаимосвязи)

#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];
}
  

Эндрю