2014-10-22 2 views
1

Я обработки большого количества данных в одном ViewController используя Alamofire так:Подождите асинхронной операции для завершения в Swift

Alamofire.request(.GET, APIENDPOINT) 
     .responseJSON { (_, _, jsondata, _) in 
      // whole lotta json parsing and creating custom objects from json 
    } 

Essentialy, данные захватил в одном контроллере представления, который действует как экран загрузки, который уведомляет пользователя что что-то происходит в фоновом режиме. Затем, когда асинхронный запрос завершен и все данные заполнены, данные отображаются в другом контроллере представления.

Каков наилучший способ достижения такого поведения?

ответ

0

Сделайте это так, чтобы диспетчер представления, который отправляет запрос, ждет, пока данные не будут загружены и проанализированы в некоторые полезные компоненты модели. Затем инициализируйте другой диспетчер представлений, передайте проанализированные данные с удаленного устройства, а затем покажите/нажмите.

Alamofire.request(.GET, APIENDPOINT) 
    .responseJSON { (_, _, jsondata, _) in 
    // whole lotta json parsing and creating custom objects from json 
    let anotherViewController = AnotherViewController() 
    anotherViewController.dataFromRemote = parsedRemoteData 
    self.showViewController(anotherViewController, animated:true) 
} 
0

Ну, я бы использовал ручную сегу. Что-то вроде этого:

Alamofire.request(.GET, APIENDPOINT) 
    .responseJSON { (_, _, jsondata, _) in 
     // whole lotta json parsing and creating custom objects from json 
     self.performSegueWithIdentifier("realViewController", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if segue.identifier == "realViewController" { 
    let vc:MyViewController = segue!.destinationViewController as MyViewController 
    vc.setupWithData(self.myParsedData) 
    } 
} 
Смежные вопросы