iOS 5 Twitter API - PullRequest
       1

iOS 5 Twitter API

0 голосов
/ 13 ноября 2011

Я разрабатываю небольшое приложение, которое подключается к Twitter и получает информацию. Я хочу отобразить эту информацию для пользователя в передней части. Проблема заключается в том, что, поскольку API Twitter использует потоки, при попытке взаимодействия с графическим интерфейсом появляется следующая ошибка:

Попытка получить веб-блокировку из потока, отличного от основного потока или веб-потока. Это может быть результатом обращения к 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 из этой функции, я получаю сообщение об ошибке.

Спасибо

1 Ответ

4 голосов
/ 23 ноября 2011

Внесение изменений в пользовательский интерфейс из фонового потока никогда не допускается.В этом случае вы должны вызывать с помощью [self executeSelectorOnMainThread: withObject: waitUntilDone:] в блоке ответов TWRequest.См. Ниже

Пример ...

   - (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
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...