Мое приложение использует Core Data (с некоторой помощью Magical Record) и довольно сильно многопоточно с использованием NSOperation
.
Конечно, я стараюсь передавать только NSManagedObjectID
между потоками / операциями.
Теперь, чтобы вернуться к соответствующему управляемому объекту в операции, я использую -existingObjectWithID: error:
таким образом:
Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];
Но я получаю ноль и error
говорит, что это ошибка № 13300: NSManagedObjectReferentialIntegrityError
.
Вот что говорится в документации об этой ошибке:
NSManagedObjectReferentialIntegrityError
Error code to denote an attempt to fire a fault pointing to an object that does not exist.
The store is accessible, but the object corresponding to the fault cannot be found.
Что неверно в моем случае: этот объект существует. Действительно, если я перебираю все экземпляры этого объекта Collection
с помощью NSFetchRequest
, я нахожу его среди них, а его NSManagedObjectID
- это именно тот, который я передал -existingObjectWithID: ошибка:
.
Более того, если я использую -objectWithID:
вместо этого, я очень хорошо получаю обратно правильный объект.
Так что я кое-что упустил. Вот несколько дополнительных наблюдений / вопросов:
Возможно, мне что-то не хватает относительно того, что делает existingObjectWithID: error:
? В документации говорится:
If there is a managed object with the given ID already registered in the context, that object is returned directly; otherwise the corresponding object is faulted into the context.
[...]
Unlike objectWithID:, this method never returns a fault.
Это не помогает в моей проблеме. Я не против того, чтобы мой объект полностью испортил, и это не ошибка. Фактически, любая ошибка в нем сработает в следующей строке кода, когда я получу доступ к свойствам объекта.
NSManagedObjectReferentialIntegrityError
? Спасибо за любые разъяснения.