2012-01-13 2 views
4

Я хочу вызвать метод асинхронно. Это метод, который получает HTML с сервера и устанавливает его в UIWebView:Асинхронный вызов метода с использованием IOS 4

NSString *htmlTest = [BackendProxy getContent]; 
[webView loadHTMLString:htmlTest baseURL: nil]; 
[webView setUserInteractionEnabled:YES]; 

Я хочу начать индикатор активности в UIWebView во время выборки данных, так что мне нужно позвонить getContent асинхронно. Как я могу это достичь?

+0

Обратите внимание, что методы не должны начинаться с префикса 'get', если они не возвращают значения, проходящие по ссылке аргументы. Просто назовите его 'content'. – bbum

+0

Это не настоящее имя. Это было просто для этого примера, потому что настоящее имя более сложное = P. Спасибо за советы – Tony

ответ

8

Предлагаю performSelectorInBackground:withObject: из NSObject.

Как следующее:

- (void)loadIntoWebView: (id) dummy 
{ 

    NSString *html = [BackendProxy getContent]; 
    [self performSelectorOnMainThread: @selector(loadingFinished:) withObject: html]; 
} 


- (void)loadingFinished: (NSString*) html 
{ 
    // stop activity indicator 
    [webView loadHTMLString:html baseURL: nil]; 
    [webView setUserInteractionEnabled:YES]; 
} 

- (void) foo 
{ 
    // ... 
    // start activity indicator 
    [self performSelectorInBackground: @selector(loadIntoWebView:) withObject: nil]; 
} 
+0

Вы слишком быстро участвуете в голосовании. Я понял и исправил это всего за минуту до вашего замечания. – Krizz

+0

Исправлено; намного лучше. – bbum

+0

Это был не я, который был ниспослан. Я попробую это. Благодаря! – Tony

14

Это отличный вариант использования для НОД, новый (МОГ) параллелизм API Apple.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue,^{ 
    // Background work here 
    NSLog(@"Finished work in background"); 
    dispatch_async(dispatch_get_main_queue(),^{ 
     NSLog(@"Back on main thread"); 
    }); 
}); 

Вот документация по dispatch queues

+0

Преимущества или недостатки по сравнению с выполнениемSelectorInBackground: withObject? – Tony

+2

@Tony Преимущества: более тонкий контроль, более чистый код (на мой взгляд, мне не нравится, что логика для одного метода так распространена). Недостатки: не работает до iOS 4. – cobbal

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