Core Data -existingObjectWithID: ошибка: вызывает ошибку 133000

Мое приложение использует 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: вместо этого, я очень хорошо получаю обратно правильный объект.

Так что я кое-что упустил. Вот несколько дополнительных наблюдений / вопросов:

  • «объект, который не существует»: что означает «существовать» в этом предложении? "существуют" где? На тот момент он определенно «существует» в моем хранилище Core Data.
  • «объект, соответствующий неисправности, не может быть найден»: что это за значение слова «обнаружено» в этом предложении? "нашел" где? Это определенно "можно найти" в моем хранилище Core Data на тот момент.

Возможно, мне что-то не хватает относительно того, что делает 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 ?

Спасибо за любые разъяснения.

40
задан Jean-Denis Muys 26 December 2011 в 16:27
поделиться