2012-04-18 4 views
0

У меня есть следующий код, который извлекает некоторые данные из сценария php. Я обнаружил, что он блокирует интерфейс, чтобы индикатор прогресса не вращается. Есть ли простой способ отправить это на задний план, чтобы пользовательский интерфейс мог делать все, что ему нужно? У меня создалось впечатление, что использование блоков достигло бы этого, но я, очевидно, был не прав (обучение Obj-C одним шагом за раз!)AFHTTPRequestOperation blocks UI

Спасибо!

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
         self.user.username, @"username", 
         self.user.password, @"password", 
         nil]; 
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL: 
         [NSURL URLWithString:@"http://domain.com"]]; 

    // Show animated progress indicator, etc  
[self enbleLoadingState:YES]; 

[client postPath:@"/en/api/login" parameters:params success:^(AFHTTPRequestOperation *operation, id response) { 
    [self enbleLoadingState:NO]; 
    // Do stuff 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    [self enbleLoadingState:NO]; 
    // Show error 
}]; 
+0

Этот код должен работать, запрос загружается в фоновом режиме. Проблема должна быть в другом месте. – Felix

+0

лучший подкласс AFHTTPClient и сделать его одноэлементным классом – Felix

+0

@ phix23 Но он не работает :(В моем сценарии php я делаю сон (5), который ждет 5 секунд, и индикатор прогресса остается там, и я не могу ударил любые другие кнопки в пользовательском интерфейсе. Я использую последние Xcode и iOS SDK на сегодняшний день. Это происходит в симуляторе, а также в первом поколении iPad. Я использую ARC ... Я ничего не могу придумать иначе я буду пробовать подклассифицировать клиента, как вы сказали (я думаю, что я видел пример этого где-то). – Julian

ответ

0

Этот код должен работать, запрос загружается в фоновом режиме. Проблема должна быть где-то в другом месте. Я не знаю, где время тратится на основную нить, может быть, в enbleLoadingState:? Метод, начинающийся с запроса, должен немедленно вернуться. Проверьте это, вставив NSLog в начале и в конце метода и внутри блока успеха. NSLog в блоке успеха должен распечатать последний.

Смежные вопросы