0

iPhone で、管理対象オブジェクトをバックグラウンドで削除しようとしました。

- (void) cleanUp {
    dispatch_queue_t queue_cleanUp;
    queue_cleanUp = dispatch_queue_create("com.aroundcal.cleanup", NULL);
     dispatch_async(queue_cleanUp, ^{
        while (!self.stopThread) {      
            [self deleteMyObjects]; 
            [NSThread sleepForTimeInterval:30];  
        }
    }); 
    dispatch_release(queue_cleanUp);
}

ではdeleteObjects、別の managedObjectContext を使用します。これらのオブジェクトの一部をユーザー インターフェイスから削除すると、cleanUpスレッドがバックグラウンドで実行されるとアプリがクラッシュします。エラーは、フォルトを完全に埋めることができないということです。

誰か助けてくれませんか?

4

1 に答える 1

1

バックグラウンド コンテキストが永続ストアからオブジェクトを削除したことをフォアグラウンド コンテキストが認識していないため、クラッシュしています。フォアグラウンド コンテキストが削除されたオブジェクトで失敗しようとすると、クラッシュします。

バックグラウンド スレッドのコンテキストで行われた変更を、フォアグラウンド スレッドのコンテキストとマージする必要があります。フォアグラウンド コンテキストをバックグラウンド コンテキストのオブザーバーとして登録する必要があります。これにより、新しいオブジェクトで障害が発生する前に自身を更新できるようになります。

Core Data Books: RootController.mには、その方法の良い例があります。ファイルはかなり長いです。詳細なコメントを探してmergeChangesFromContextDidSaveNotification:読んでください。

于 2010-08-17T12:27:30.983 に答える