NSOperationQueue waitUntilAllOperationsAreFinished или executeSelectorOnMainThread - PullRequest
1 голос
/ 21 июля 2011

У меня есть фон NSInvocationOperation создание и сохранение NSArray в NSManagedObject подкласс.

Я знаю, что сохранение должно происходить в главном потоке,поэтому я использую executeSelectorOnMainThread для сохранения в операции.

Когда пользователь нажимает кнопку «Домой» на iPhone 3G, приложение закрывается.В applicationDidEnterBackground Я делаю [очередь waitUntilAllOperationsAreFinished] , так что NSInvocationOperation успевает завершиться.

Проблема заключается в том, что он ожидает только «фоновую часть»операция - приложение закрывается, прежде чем executeSelectorOnMainThread часть операции называется .Это означает, что мой NSManagedObject не сохраняется.

Я пытался сохранить объект в потоке операции - приложение корректно закрывается и изменения сохраняются.Но я думаю, что это не хорошо, так как NSManagedObject не является потокобезопасным.Или это нормально?

Похоже на уловку 22. Я должен что-то упустить - есть какой-нибудь элегантный способ, как это решить?

1 Ответ

0 голосов
/ 21 июля 2011

Вы должны просто выполнить операцию сохранения в фоновом режиме, используя отдельный контекст, который уведомляет основной контекст. Это означает, что создание, выборка и сохранение управляемых объектов должны выполняться в этом отдельном контексте, и это задокументировано в Базовые данные - параллелизм с базовыми данными . Вам также следует запустить фоновую задачу , чтобы у вас было достаточно времени, чтобы закончить сохранение данных.

...