#objective-c #core-data #nsmanagedobject #nsmanagedobjectcontext
#objective-c #основные данные #nsmanagedobject #nsmanagedobjectcontext
Вопрос:
Я хочу реагировать на изменения определенных NSManagedObject
файлов, которые были добавлены, обновлены или удалены.
Однако у меня проблема с удаленными объектами: все связи с другими объектами теперь равны нулю.
Есть ли способ получить такое уведомление до того, как объект будет затронут таким образом?
Редактировать:
Это в основном мой код удаления:
[moc deleteObject:myObject];
id saveBlock = ^{
NSError *error = nil;
BOOL saved = NO;
saved = [self save:amp;error];
// error handling.
};
[moc performBlockAndWait:saveBlock];
Комментарии:
1. Подготовить удаление?
2. Я только что обнаружил эту проблему сам. Я знаю, что этому вопросу много лет, но вы случайно не помните, что вы нашли?
3. @SAHM Я думаю, что я создал пользовательское уведомление и опубликовал его в соответствующее время, передав соответствующий объект.
Ответ №1:
Если вы хотите реагировать на удаления, вам следует прослушивать NSManagedObjectContextWillSaveNotification
и следить за NSDSeletedObjectsKey
проходом как часть уведомления. Это последний шанс перед удалением разобраться с ними.
Комментарии:
1. Вы имеете в виду
NSDeletedObjectsKey
? Я думал об этом, но, согласно документам Apple, для этого нетuserInfo
словаряNSManagedObjectContextWillSaveNotification
.2. Вы правы, но вы можете запросить
NSManagedObjectContext
все-deletedObjects
во время уведомления и получить их.3. Хорошо, спасибо, я смог заставить это работать, но ссылка на родительский объект тоже равна нулю. Я думаю, мне придется написать свое собственное пользовательское уведомление.
4. Нет причин для каких-либо отношений
nil
в этот момент, если вы что-то не сделали, когда удаляли объекты. Можете ли вы показать свой код удаления в своем вопросе?5. Я столкнулся с той же проблемой. Вы нашли обходной путь? Связь с родительским объектом равна нулю, даже в NSManagedObjectContextWillSaveNotification . Мой код для удаления объекта очень прост: просто возьмите объект из таблицы и удалите его.