2014-09-03 7 views
1

Equivalant 스위프트의 performSelectorOnMainThread waitUntilDone :나는 신속이 번역하고 싶어

dispatch_async(kBgQueue, ^{ 

     NSData* data = [NSData dataWithContentsOfURL: googleRequestURL]; 

     [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; 

    }); 

그것은 구글이 API를 배치 사용하기위한입니다.

간단한 NSURLSession 요청을 사용하는 것에 대해 궁금한데 dataWithContentsOfURL이 NSURLSession 요청 작업을 수행하는 것 같습니다.

누군가가?

답변

1

dataWithContentsOfURL은 권장하지 않습니다. 비동기 다운로드에는 NSURLSession을 사용해야하며, 더 간단하면 NSURLConnection을 선호합니다.

델리게이트 콜백은 다운로드가 완료되면 메인 스레드에게 알립니다. 따라서 Great Central Dispatch API를 사용할 필요가 없습니다.

0

여기 Mundi가 더 좋은 도구는 NSURLSession입니다. 하지만 코드가 작동 할 수 있습니다. GCD를 올바르게 사용해야하고 실패 할 수 있다는 사실을 처리해야합니다.

dispatch_async(kBgQueue) { 
    if let data = NSData.dataWithContentsOfURL(googleRequestURL) { 
     dispatch_sync(dispatch_get_main_queue()) { self.fetchedData(data) } 
    } else { 
     // Here's the problem with dataWithContentsOfURL. You had an error, but you 
     // don't know what it was. I guess you'll do something here... 
    } 
} 
관련 문제