CoreData в одном отдельном потоке - PullRequest
0 голосов
/ 01 декабря 2011

Короче говоря, я хочу:

  • Базовые данные, которые запускаются без блокировки основного потока
  • сущностей со связями
  • привязок в InterfaceBuilder

Я попробовал «все», но оказалось, что слишком много трудностей с Базовыми данными в двух или более потоках и двух NSManagedObjectContexts, а также в привязках и сущностях со связями и так далее.Эти потоки могут сделать CoreData очень сложным.

Тем не менее, я хочу использовать Core Data, и я хочу, чтобы он работал в фоновом режиме для хорошего отклика пользовательского интерфейса.

Поэтому мне интересно, возможно ли полностьюзапустить все, что связано с базовыми данными, в одном отдельном потоке, который не является основным потоком?

Я отправлю всем 50 баксов, если я наконец найду решение, которое работает ...

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Я использовал два экземпляра NSManagedObjectContext, чтобы перенести некоторые более длительные задачи с данными в другой поток с помощью Grand Central Dispatch.

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

0 голосов
/ 01 декабря 2011

Я не уверен, может ли это помочь вам, но, возможно, вы можете создать новую NSOperationQueue и добавить все основные функции данных, которые вам нужны, в фоновом режиме.Поэтому в вашем классе есть свойство NSOperationQueue, а затем в методах -viewDidLoad вы создаете новое: myOperationQueue = [NSOperationQueue new];Всякий раз, когда вы хотите выполнить операцию, вы можете добавить ее в очередь, и я считаю, что она будет выполняться в отдельном потоке (self.myOperationQueue addOperation: someFunction), и если вы хотите взаимодействовать с основным потоком, тогда вызовите assert ([NSThreadisMainThread]) в начале вашего вызова метода.Я использую Core Data и создаю потоки другим способом, но из второго потока я могу создать временный объект, из которого создается NSManagedObject.

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