Асинхронный вызов метода с использованием IOS 4 - PullRequest
4 голосов
/ 13 января 2012

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

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

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

Ответы [ 2 ]

14 голосов
/ 13 января 2012

Это отличный пример использования GCD, нового (ish) 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");
    });
});

Вот документация по очередям отправки

8 голосов
/ 13 января 2012

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