2011-11-13 6 views
0

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

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

私の質問は、Twitterの応答を受け取ったときにメインスレッドでどのように知ってそのユーザーに表示できるのですか?

コードは次のようなものだし、それが機能している:私は、この関数からGUIを変更しようとした場合

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]); 

    } 
}]; 

が、私はエラーを得ました。バックグラウンドスレッドからUI変更を加える

おかげ

答えて

4

は許可されることはありません。この場合、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 
    } 
+0

は素敵な説明.... – viral

関連する問題