#objective-c #nsmanagedobject
#objective-c #nsmanagedobject
Вопрос:
Это может быть довольно наивно, но мне было интересно, правильно ли использовать следующий оператор для удаления управляемого объекта из постоянного хранилища основных данных:
[managedObject.managedObjectContext deleteObject:managedObject];
Я запустил вышеуказанное в отладчике Xcode — он не жаловался, но содержимое объекта все еще было там. Может ли быть так, что на контекст ссылались через объект, подлежащий удалению, и, таким образом, вызывая блокировку памяти, предотвращающую удаление объекта?
Комментарии:
1. Хорошо, если для его удаления разрешено использовать собственное свойство объекта NSManagedObjectContext, почему бы не определить метод ‘DeleteObject’ без каких-либо параметров и использовать свойство контекста объекта? Кроме того, я не могу представить ситуацию, когда у вас был бы определен NSManagedObject в одном контексте, но вы хотели бы удалить его из другого — может кто-нибудь привести мне пример?
Ответ №1:
Что касается сохранения вашего содержимого, вам все равно нужно вызвать save: в контексте после удаления объекта.
Я не могу ответить конкретно, если у вас возникнет проблема со ссылкой на managedObjectContext в managedObject, поскольку я обычно использую «DataManager» для управления моим managedObjectContext. Ниже приведен пример метода удаления, который я использовал в одном из моих DataManager:
- (void)deleteReport:(Report*)aReport inContext:(NSManagedObjectContext*)context {
if (aReport != nil) {
if (context == nil) {
context = self.managedObjectContext;
}
context.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy;
[context deleteObject:aReport];
NSError *error = nil;
[context save:amp;error];
if (error) {
//NSLog(@"%@", error);
}
}}
РЕДАКТИРОВАТЬ: Для пояснения, отчет в этом методе является экземпляром NSManagedObject , и метод принимает NSManagedObjectContext в качестве параметра, поскольку приложение, из которого оно было извлечено, поддерживает использование нескольких контекстов.