У меня есть объект Department
, который имеет отношение один ко многим с объектом Employee
.Во время выполнения для каждого объекта Department
я хочу сохранить отсортированный массив объектов Employee
(отсортированных по некоторому атрибуту), которые будут использоваться в качестве модели в различных объектах представления.
Из того, что я прочиталСуществует два способа представления отсортированного массива:
Rep1 : определение извлеченного свойства в Department
(сортировка выполняется Core Data);
Rep2: ведение переменной экземпляра sortedEmployees
(NSArray
из Employee
объектов) в Отделе (сортировка выполняется моим кодом).
Теперь моя настоящая проблема заключается вКогда приложение запускается, у меня есть большое количество Departments
и Employees
для извлечения из постоянного хранилища.Я хочу выполнить сортировку в фоновом режиме, чтобы не блокировать пользовательский интерфейс.
Я пробовал несколько методов, которые все оказались бесполезными:
Method1 (используя Rep1 ): В фоновых потоках (используя NSOperationQueue
) извлеките все Departments
, затем выполните свойство каждого из них.Затем вернитесь в основной поток, найдите соответствующий объект Department
в контексте управляемого объекта основного потока ( MOC ) ( NSManagedObjectID ) и используйте свойство fetched.Проблема с Method1: свойство fetched в объекте Department основного потока не заполняется даже после завершения фоновой выборки Department, что означает, что оно повторно выбирается в Department из основного потока!Это побеждает всю цель фоновой выборки.Неправильно ли я предположить, что извлеченное свойство после извлечения существует во всех MOC?
Method2 (с использованием Rep2 ): в фоновых потоках (с использованием * 1046)*), извлеките все Departments
, затем вычислите каждый массив sortedEmployees
.Затем вернитесь в основной поток, найдите соответствующий объект Department в основных потоках MOC ( NSManagedObjectID ) и установите вышеупомянутый массив для этого объекта .Проблема с Method2: Объектами в массиве sortedEmployees
являются Employee
объекты, принадлежащие фоновому потоку MOC .Когда основной поток пытается получить к ним доступ позже, происходит сбой с чем-то вроде "NSManagedObject with ID ... has been invalidated."
Это связано с тем, что каждый поток должен иметь свой собственный MOC (и связанные с ним управляемые объекты).
Так как же сортировать управляемые объектывообще в фоновом режиме, если управляемые объекты не могут существовать через границы потоков?Я что-то упустил?