У меня есть свойство (как managedObject) в синглтоне. Этот объект в свойстве может быть обновлен (удален, затем создан новый объект с пользовательским Id, равным Id старого объекта), затем я сохраняю контекст, обнуляю свойство, извлекаю новый объект и назначаю его свойству.
У меня не было ошибки, все нормально. После перезапуска приложения я получил исключение «CoreData не удалось выполнить ошибку». Я открыл базу данных с помощью sqliteBrowser и увидел там старый объект и новый объект. Новый объект правильный. Старые объекты (что должно быть удалено) имеют отношения с объектами, которые были удалены.
Кроме того, пользовательский интерфейс может иметь доступ к свойству managedObject, когда другой поток обновляет объект.
Как это может произойти? И как это предотвратить? Я прочитал устранение неполадок coreData с "CoreData не может выполнить ошибку". Я не нашел свою проблему с примера.
Я очень смущен этим. Я имею представление, но не уверен, что это хороший способ:
Что делать, если сделать свойство не как managedObject, а как id (пользовательский идентификатор, как NSNumber), установщик owerload и получатель. Сеттер получает тот же объект, но имеет доступ к пользовательскому идентификатору и назначает идентификатор для свойства. Getter - получает объект по идентификатору, сохраненному в свойстве.
Получатель и установщик заблокируют NSLock в начале и разблокируют его в конце. Поток, который обновляет объект, также блокирует блокировку до завершения обновления и сохранения.
Большое спасибо!
P.S.
Я очень извиняюсь, но я обычно не могу показать свой код по серьезной причине.