2011-12-16 17 views
0

私はコアデータ用にいくつかのマルチスレッド同期を試みています。しかし、私は、メインスレッドで保存しなければならない場合、中:コアデータ - メインスレッドにmanagedObjectContextを保存しないでください。

- (void)importerDidSave:(NSNotification *)saveNotification { 
    NSLog(@"MERGE in destination controller"); 
    if ([NSThread isMainThread]) { 
    AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate]; 

     [[delegate managedObjectContext] mergeChangesFromContextDidSaveNotification:saveNotification]; 
    } else { 
     [self performSelectorOnMainThread:@selector(importerDidSave:) withObject:saveNotification waitUntilDone:NO]; 
    } 
} 

私はメインスレッド(その場合には、私はスピンを持っている)のいつかのフリーズを持っています。すべてのインタフェースビューはAppDelegate mocに接続するアレイコントローラに接続します。 ので、設計に関するいくつかの質問は:

  1. 私は、メインインターフェイス上の凍結を避け、メインスレッド外で管理オブジェクトコンテキストをマージすることができますか?
  2. は、私がすべての配列を別のmanagedobjectcontextに接続する場合、避けることができますか?どのように私は問題を避けることができます、作成されたコンテキストは、このオブジェクトを作成した後にマージされる内部の変更を持っていない?

任意のヘルプは高く評価されます ...

答えて

0

あなたはいつものコントローラがバインドされているコンテキストを更新する必要があります、これはUIのものであるため、あなたがメインでそれを行う必要があります糸。

私はなぜあなたが持っている方法でそれをコーディングしたのか、少し混乱しています。これは私にとっては簡単です:

- (void)importerDidSave:(NSNotification *)saveNotification { 

    NSLog(@"MERGE in destination controller"); 

    AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate]; 

    [[delegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:saveNotification waitUntilDone:NO]; 

} 

このコードを使用するとパフォーマンスが向上しますか?

+0

これは同じコードです。 – user170317

関連する問題