2015-07-04 292 views
1

我有一個簡單NSURLConnection的任務,但等待NSURLSessionTask完成

let task = NSURLSession.sharedSession().dataTaskWithURL(url1!) { data, response, error in 
    if error != nil { 
     println(error) 
     return 
    } 

    let parser = NSXMLParser(data: data) 
    parser.delegate = self 
    if parser.parse() { 
     println(self.results) 
    } 
} 
task.resume() 

if task.state == NSURLSessionTaskState.Completed { 
    println("task is done") 
} 

代替if語句,這是剛剛過去的正上方,因爲當它擊中的是代碼的任務仍在運行,我就想辦法讓代碼在「任務」完成後運行。我似乎無法在文獻中找到任何內容。

+0

我不是專業人士,但鏈接給出關於「reverseGeocode」作爲我的問題的答案正確的鏈接?除了在Objective-C中,我看不到關係。 – Tamarisk

+0

任何異步方法的解決方案都是一樣的。發佈的鏈接使用reverseGeocode作爲示例異步方法並不重要。解決方案是一樣的。 –

回答

2

這一直出現。當異步任務在完成塊內完成時,您應該放置想要執行的代碼。

+0

如果你有多個不同完成時間的任務,並且在運行一些代碼之前需要完成所有任務才能完成? – Tamarisk

+1

@Tamarisk如果你需要多個任務創建一個數組'taskArr'。當創建任務時,將其添加到數組'taskArr'。如果任務終結者(命中完成塊)將其從'taskArr'中移除。當'taskArr'爲空時,在所有任務完成後執行一些代碼 – larva

+0

可以使用dispatch_groups或NSOperation依賴關係來協調多個異步任務。請參閱:https://developer.apple.com/reference/foundation/nsoperation/1412859-adddependency – HackaZach