Не уверен, что это проблема с тем, как Magical Record сохраняет, или я просто где-то делаю ошибку нуба.
Я использую NSFetchedResultController (FRC) и UITableView для отображения списка сущностей, когда пользователь нажимает «Добавить», новый контроллер представления с помощью редактора нажимается, новая сущность создается с помощью [MyEntity MR_createEntity ]
. Пользователь может добавить сюда дополнительные объекты, которые добавляются к основному объекту через связь. Когда пользователь нажимает «Сохранить» в этом контроллере представления, контекст сохраняется с использованием [[NSManagedObjectContext MR_contextForCurrentThread] MR_save]
Кажется, что NSFetchedResultsController обновляется, но когда я нажимаю для редактирования объекта, ни один из дочерних объектов не существует. . Отладка, кажется, показывает, что даже если объект был сохранен, FRC все еще имеет объект с временным идентификатором.
Я делаю наивный [self.tableView reloadData]
в методе делегата FRC controllerDidChangeContent
.
При перезапуске приложения загружаются правильные объекты, а дочерние объекты правильно отображаются в контроллере представления редактора.
Похоже, что FRC отвечает на событие сохранения «основного потока», но на самом деле сохранение происходит в фоновом потоке, поэтому FRC его не видит.Я проверил, и все «мои» операции (настройка FRC, создание и выборка сущностей) происходят в контексте основного потока.
Я пытался прослушивать уведомления об изменениях в MR_rootSavingContext и объединять их с контекстом основного потока, что вроде как сработало, но в итоге я получил дубликаты строк в FRC (одна была правильной «постоянной» сущностью, а другая — временной) .