Представьте себе приложение для социальной фотографии, такое как Instagram. Вы видите одну из фотографий вашего друга в своем фиде. Эта фотография сохраняется в CoreData как что-то вроде этого:Сохранение CoreData NSManagedObject new
Photo (NSManagedObject)
Attributes: id, imageURL
Relationships: comments (set of Comment objects), likes (set of Like objects)
У меня есть контроллер представления, который имеет ссылку на объект Фото. Этот контроллер просмотра также обрабатывает действия для симпатий и комментариев к фотографии.
Итак, когда кому-то нравится фотография, поток таков: Отправьте на сервер. Если сообщение API успешно выполнено, обновите объект Photo в CoreData с помощью любой новой информации, полученной с сервера, которая будет включать в себя новую. На этом этапе фото должно иметь еще один объект Like, связанный с ним в CoreData, чем до того, как я нажал аналогичную кнопку.
Теперь у меня проблема. Контроллеру просмотра необходимо обновить количество фотографий на фотографии. В блоке успеха, я делаю это:
self.likesLabel.text = [NSString stringWithFormat:@"%d likes", self.photo.likes.count];
Проблема заключается в том, что self.photo.likes.count докладывает 0 в этой точке (это был отличен от нуля, прежде чем я нажал на кнопку, как). Если я перейду в другое место и вернусь к этому экрану, подсчет будет правильно обновлен. Похоже, что Photo managedObject становится «грязным», когда я его обновляю. Обновление, вероятно, происходит в другом контексте (я использую Magical Record). Обновление выглядит примерно так:
NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread];
Photo* photo = [Photo MR_findFirstWithPredicate:somePredicate inContext:context];
...
photo.likes = likes;
photo.comments = comments;
[photo save:context];
Таким образом, вопрос, как я правильно держать объект фото обновленного в контроллере представления, так что я могу всегда надежно запрашивать количество подобных и комментарии? В общем, как вы всегда можете сохранить новую версию NSMangagedObject, учитывая, что она может быть обновлена в других потоках/контекстах?
Я пробовал прослушивать NSManagedObjectContextObjectsDidChangeNotification, но я столкнулся с той же проблемой, когда фотографии 0 мне нравятся и комментируют, когда я получаю это уведомление.
Вы должны объединить –
выборки! = Обновление тоже BTW –