2017-01-05 3 views
1

Предположим, что я получил объект NSManagedObject внутри исполняемого блока в частном NSManagedObjectContext. Я также сохранил указатель NSManagedObject в AppDelegate. поэтому в основном я держу его на «основной теме». Может ли это вызвать какие-либо проблемы? Обратите внимание, что я всегда получаю доступ к атрибутам в пределах выполнения, представленным в правильном контексте.Указатель на объект NSManagedObject за пределами функции executeBlock

+1

с CoreData, вы не должны передавать объект между потоком, но передавать его ObjectID и снова извлекать из хранилища данных в другой поток. –

ответ

2

Нет, вы не можете этого сделать. Ссылка на объект из другого контекста может привести к краху вашего приложения.

Существует несколько решений. Например, ваша глобальная переменная может быть уникальным атрибутом, который вы можете использовать для извлечения объекта в правильном контексте.

Некоторые из операций могут выполняться в том же контексте, что и объект, в котором хранится ваш глобальный объект.

И, наконец, вы также можете передавать объекты между контекстами, используя objectID, непрозрачный тип NSManagedObjectID. Вы можете инициализировать свой локальный объект в определенном потоке с помощью object(with:).

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