2012-02-27 4 views
0

私はdispatch_asyncを使用して外部ソースからデータを取得しようとしていますが、それはUILabelsを更新するだけで動作します。UITextViewを使用したdispatch_async呼び出し

UILabelとUITextView

の間に、このシナリオの違いはここrelevanteコードですいただきまし

は:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{ 
     /* Download stuff */ 
     PAPavillionInfoModel *info = [PADataSource getPavillionInfo]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      /* Send UI updates back to the main thread. */ 
      capacity.text = info.capacity; 
      inauguration.text = info.inauguration; 
      architect.text = info.architect; 
      inspiration.text = info.inspiration; 

      // THESE NEXT TWO LINES GIVE AN ERROR [message sent to deallocated instance] 
      description.text = info.description; 
      imageView.image = info.photo; 

     }); 
    }); 

getPavillionInfoはとPHPのページに移動し、JSONデータを取得し、それを解析します。

ブロックの最初の行は、UIスレッドの作業に使用されます。彼らはUILablesのテキストを更新します。最後の2つはありません。

ここに何かがありませんが、何が分かりませんか。

答えて

0

文法的に間違っていることは何もないので、問題は[PADataSource getPavillionInfo]の戻り値にあると推測しています。説明または写真が公開されました。

これは何を示していますか?

NSLog(@"info.description: %@",info.description); 
    NSLog(@"info.photo: %@",info.photo); 
+0

ありがとう、私は完全に問題の間違った側に焦点を当てていた。 infoクラスのプロパティには、retainではなくcopyがあります。奇妙な部分は、同じしかし彼らが働いた他のプロパティです。 –

0

エラーメッセージに従って、非同期呼び出しに問題はありません。呼び出し時にdescriptionimageViewまたはinfoが割り当て解除されていることを示しています。保持/解放を確認してください。

実行の途中でinfoオブジェクトを何らかの理由で割り当てを解除する可能性があります。これは例えばgetPavillionInfoメソッドが何らかの理由で古いinfoオブジェクトの割り当てを解除した場合

関連する問題