2014-02-05 2 views
2

У меня есть несколько экземпляров NSPersistentStoreCoordinator, которые имеют только один NSPsistentStore каждый, все указывают на тот же файл sqlite. И в моем тестировании передачи объектов NSManagedObjectID между ними, а затем вызватьБезопасно ли передавать NSManagedObjectID между несколькими NSPsistentStoreCoordinator-s?

- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error

на NSManagedObjectContext, кажется, работает хорошо, но я до сих пор не попадались каких-либо документов из яблока, который подтверждает, что это должно работать нормально.

Итак, мой вопрос: если кто-нибудь знает, должно ли это работать (ссылка на документацию на яблоко, подтверждающую, что это было бы здорово!), Если кто-нибудь знает, что это обычно не должно работать, и что я не должен делать этого, это было бы потрясающе!

+0

Из теста, который я делал в прошлом (pre-iOS7), возникали проблемы, при которых выбор объектов с использованием предиката «SELF IN ...» не возвращал результатов при использовании идентификаторов из разных магазинов (должен был сначала пройти через представление URI работать). кроме этого, все остальные операции, казалось, работали нормально. –

+0

@DanShelly Sound fair, я изначально проходил вокруг URI-представлений, но из любопытства/для упражнений решил попробовать идентификаторы объектов, хотя я не использую эти идентификаторы объектов в запросах выборки, просто вызывая существующийObjectWithID: error: используя их. –

ответ

1

Всегда безопасно называть этот метод. Возвращает ли объект объект другой истории.

При использовании идентификатора объекта из другого контекста вы получите только результат, отличный от нуля, если объект уже доступен для контекста, на который вы вызываете этот метод. Это означает, что объект уже существует в постоянном хранилище, то есть он уже сохранен в исходном контексте управляемого объекта.

Или, другими словами, вы получите только результат, отличный от нуля, если вы уже сохранили объект с идентификатором, и если вы используете постоянный (пост-сохранить) идентификатор объекта.

+0

Спасибо Том! Я в основном принимал все обычные меры предосторожности, если я передаю идентификатор объекта объекта, который не был сохранен, я вызываю getPermanentIDsForObjects: error: и до сих пор не сталкивался с какими-либо проблемами. Считаете ли вы безопасным передавать идентификаторы объектов между разными координаторами, у которых есть один магазин, каждый из которых указывает на один и тот же файл sqlite? или я должен действительно обходить представления URI? –

+0

Пропускание идентификаторов объектов - это целая причина, по которой они открыты через открытый API. Получение таких постоянных идентификаторов может по-прежнему получать нулевые результаты в других координаторах, потому что они могут искать объект только, перейдя в файл постоянного хранилища. Если вы фактически не сохранили объект, он может быть недоступен другим координаторам. –

+0

Это имеет смысл. Я сделаю дополнения к моему коду, чтобы проверить временные идентификаторы перед их передачей, и nil управляемые объекты после их извлечения (я уже проверяю ошибку на getPermanentIDsForObjects: error :), чтобы быть в безопасности. Спасибо, добрый сэр! –

 Смежные вопросы

  • Нет связанных вопросов^_^