NSManagedObjectContextObjectsDidChangeNotification NSDeletedObjectsKey Объекты больше не имеют ссылок на связанные объекты

#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 . Мой код для удаления объекта очень прост: просто возьмите объект из таблицы и удалите его.