Мое приложение использует Core Data (с помощью Magical Record) и довольно многопоточно использует NSOperation
.Основные данные -existingObjectWithID: ошибка: вызывает ошибку 133000
Конечно, я очень осторожен, чтобы обойти только 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:error:
.
Кроме того, если я использую -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
?
Спасибо за любое просвещение.
Вы когда-нибудь это выясняли? Я получаю ту же проблему, и мой объект определенно присутствует, и операция сохранения работает, но это происходит только эпизодически. – Adam