2011-12-14 10 views
1

NSOperation内でASINetworkQueueを使用します。これは素晴らしい作品で、問題はありません。失敗したのはコアデータを保存することです。私はこの操作のために新しいNSManagedObjectContextを設定しました。ASINetworkQueue NSOperation内でコアデータを保存中エラー

ASINetworkQueueが終了し、デリゲートセレクタが呼び出されたときにデータを保存することが問題だと思います。デリゲートはmainThreadで呼び出されるため、保存メッセージは失敗します。

これは問題になることがありますか?誰にも解決策がありますか?

答えて

0

PerformSelectorOnMainThreadメソッドを右に使用しています(インスタンス化された新しいManagedObjectContextの変更をマージするには)?

私は私の操作でこのような何かを行う(CTXである私のインスタンス化MOC):通知の

まずレジスタ:次に

// Register context with the notification center 
     NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

     [nc addObserver:self 
       selector:@selector(mergeChanges:) 
        name:NSManagedObjectContextDidSaveNotification 
       object:ctx]; 

あなたがコンテキスト保存する必要があります。

if ([ctx hasChanges]) { 
      error = nil; 

      // Save the context. 
      if (![ctx save:&error]) 
      { 
       // Do something with the error 
      } 

      // Clear out the scratchpad 
      [ctx reset]; 

     } 

そして、メインMOCとマージする方法:

- (void)mergeChanges:(NSNotification *)notification 
{ 
    id appDelegate = [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *mainContext = [appDelegate managedObjectContext]; 
    // Merge changes into the main context on the main thread 
    [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
            withObject:notification 
           waitUntilDone:NO]; 
    // NSLog(@"Merged Changes"); 
} 

ホープこれは

+0

はい、私はこれを使用することができますが、私は、デリゲートが、私は私の別の作成したコンテキストを保存した場合、それが別のスレッドに保存されていないので、私はエラーが出るようmainThreadに呼ばれているので、それがクラッシュすると思います。これは私の提案ですが、これは問題ではないかもしれません。 – MoFuRo

+0

NSOperation内でASINetworkQueueをインスタンス化することはできませんし、そこにデリゲートメソッドも処理しますか?私はこれと同じ種類のことを行いますが(ASIHttpRequestを使用しています)、NSOperation内のデリゲートメソッドを処理するとうまくいきます。 –

関連する問題