Основные данные: мьютекс / тупик при смене двух объектов в разных потоках? - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть два основных объекта данных: Организация и Персона, которые связаны друг с другом.

Есть ли проблема, если я изменю их в разных потоках и сохраню оба?Таким образом, потоки работают параллельно:

Поток 1: - загрузить организацию с NSManagedObjectID - внести изменения в объект - сохранить объект

поток 2: - загрузить пользователя с NSManagedObjectID - внести измененияобъект - сохранить объект

Мне кажется, что я получил мьютекс из-за этого;не каждый раз, но иногда это случается.Если это проблема - какое решение?:)

Большое спасибо!

Стефан

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Да, это проблема, если вы используете тот же NSManagedObjectContext. Core-Data не является полностью поточно-ориентированным, как NSManagedObjectID. В фоновом потоке вы должны создать отдельный контекст с тем же хранилищем, а затем сохранить, который уведомляет основной поток о сохранении, чтобы объединить два контекста. Вы можете контролировать это слияние, создавая политики слияния. Так что вы все еще можете сделать это, но не так легко, как надеялись.

0 голосов
/ 15 ноября 2011

Не позволяйте потокам работать параллельно. CoreData очень эффективен. Просто последовательно выполняйте манипуляции с данными в одном и том же потоке и сохраняйте их один раз.

Базовые данные разработаны таким образом, что очень редко возникает необходимость иметь более одного NSManagedObjectContext. Один такой контекст всегда должен выполняться в одном потоке в данный момент времени.

EDIT

Если это невозможно, поскольку вы полагаетесь на веб-службу и т. Д., Рассмотрите возможность использования NSNotification s и сохраните только в основном потоке. (С performSelectorOnMainThread).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...