iOS 5 Twitter API

Twitterに接続して情報を取得する小さなアプリケーションを開発します。この情報をフロントエンドのユーザーに表示したい。問題は、Twitter
APIがスレッドを使用するとき、GUIと対話しようとすると次のエラーが発生することです。

メインスレッドまたはウェブスレッド以外のスレッドからウェブロックを取得しようとしました。これは、セカンダリスレッドからUIKitを呼び出した結果である可能性があります。

私の質問は、Twitterの応答が受信されてユーザーに表示できるようになったときに、メインスレッドでどのように知ることができるのですか?

コードはこのようになり、関数内にあります:

NSString * url = [[NSString alloc] initWithFormat:@"http://search.twitter.com/search.json?q=%@", query];

TWRequest * request = [[TWRequest alloc] initWithURL:[NSURL URLWithString:url] parameters:nil 
    requestMethod:TWRequestMethodGET];    

[request performRequestWithHandler:^(NSData * responseData, NSHTTPURLResponse * urlResponse, NSError * error)
 {
     if ([urlResponse statusCode] == 200) 
     {
        //format response and show to user
        //show to user
     }
     else
     {
         NSLog(@"Twitter error, HTTP response: %i", [urlResponse statusCode]);

     }
 }];

この関数からGUIを変更しようとすると、エラーが発生します。

ありがとう

ベストアンサー

バックグラウンドスレッドからUIを変更することはできません。この場合、TWRequestレスポンスブロックで[self
performSelectorOnMainThread:withObject:waitUntilDone:]を呼び出す必要があります。下記参照

例…

   - (void)makeRequest {

   NSString * url = [[NSString alloc] initWithFormat:@"http://search.twitter.com/search.json?q=%@", query];

   TWRequest * request = [[TWRequest alloc] initWithURL:[NSURL URLWithString:url] parameters:nil 
requestMethod:TWRequestMethodGET];    

     //make the request..
   [request performRequestWithHandler:^(NSData * responseData, NSHTTPURLResponse * urlResponse, NSError * error)
          {
               if ([urlResponse statusCode] == 200) 
               {
                     [self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]
               }
               else
               {
                     NSLog(@"Twitter error, HTTP response: %i", [urlResponse statusCode]);

               }
           }];
   }

   - (void)updateUI {
         //here you can now update your UI safely
   }

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です