2015-07-04 5 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") 
} 

Но вместо того, если заявление, которое просто передается прямо над, так как задача все еще работает, когда она попадает этот код, я хотел способ для запуска кода после выполнения «задачи». Кажется, я ничего не могу найти в литературе.

+0

Я не профессионал, но была ли ссылка о «reverseGeocode» в качестве ответа на мой вопрос правильной ссылкой? Помимо того, что в Objective-C я не вижу отношения. – Tamarisk

+0

Решение для любого метода async - это то же самое. Не имеет значения, что ссылка добавляет метод reverseGeocode как пример асинхронного метода. Решение такое же. –

ответ

2

Это происходит постоянно. Вы должны поместить код, который вы хотите выполнить, когда задача async будет выполнена Внутри блока завершения.

+0

Что делать, если у вас было несколько заданий с разным временем выполнения и все они нуждались в завершении, прежде чем запускать какой-либо код? – Tamarisk

+1

@Tamarisk, если вам нужно несколько задач создать массив 'taskArr'. при создании задачи добавьте его в массив «taskArr». Если финалист задачи (блок завершения удара) удаляет его из «taskArr». когда «taskArr» пуст, нужно выполнить какой-либо код после завершения всей задачи. – larva

+0

. Несколько задач async могут быть скоординированы с зависимостями dispatch_groups или NSOperation. См. Https://developer.apple.com/reference/foundation/nsoperation/1412859-adddependency – HackaZach

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