Я довольно удобный пользователь CoreData. У меня была проблема, которая абсолютно убивала меня, я понял, что пошло не так, и НЕ ПОНИМАЮ, почему это вызывало проблемы, которые я видел. Кто-нибудь может это объяснить?
Хорошо, у нас есть основной MOC, который выполняет большую часть работы с данными «только для чтения» и обрабатывает простые операции записи. Когда мы собираемся выполнить большую запись/импорт/и т. д., мы выделяем фоновый MOC в новом потоке, выполняем всю тяжелую работу, а затем сохраняем его. Сохранение приводит к срабатыванию нашего NSManagedObjectContextWillSaveNotification, а затем мы mergeChangesFromContextDidSaveNotification: и все в основном MOC отражает изменения. Довольно стандартный.
Итак, несколько дней назад в один из подклассов NSManagedObject было внесено изменение. Изменением стал вызов setValue:forKey:. Когда в этом методе не выполнялась специальная обработка, мы изначально вызывали [super setValue: forKey:]. Он был изменен на [self setPrimitateValue: forKey:] и...
После сохранения будет вызван метод mergeChangesFromContextDidSaveNotification:, но основной MOC не будет отражать изменения. Так что это немного странно. Но закройте приложение, а затем снова откройте его, изменения волшебным образом БУДЕТ ЗДЕСЬ. Что!?!
Я знаю, что это какая-то проблема с постоянным хранилищем, сохраняющим изменения, но не с другим MOC. Затем, когда новый MOC создается новый запуск, все снова в стоке. Почему?
Любой свет по этой теме поможет связке.