(Xcode 6 beta / Swift) performSegueWithIdentifier tem atraso antes de segue

Estou apenas aprendendo programação Ios pela primeira vez, com Swift e Xcode 6 beta.

Estou criando um aplicativo de teste simples que deve chamar uma API e, em seguida, segue programaticamente para uma exibição diferente para apresentar as informações recuperadas.

O problema é o segue. No meu método delegadodidReceiveAPIResults, depois que tudo foi recuperado com sucesso, eu tenho:

println("--> Perform segue")
performSegueWithIdentifier("segueWhenApiDidFinish", sender: nil)

Quando o aplicativo é executado, o console gera--> Perform segue, mas há um atraso de 5 a 10 segundos antes que o aplicativo realmente siga para a próxima exibição. Durante esse período, todos os componentes da interface do usuário são congelados.

Estou um pouco preso tentando descobrir por que as instruções não acontecem imediatamente ou como depurar isso!

Heres O controlador Full View:

import UIKit

class ViewController: UIViewController, APIControllerProtocol {

    @lazy var api: APIController = APIController(delegate: self)

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func didReceiveAPIResults(results: NSDictionary) {

        println(results)

        println("--> Perform segue")
        performSegueWithIdentifier("segueWhenApiDidFinish", sender: nil)
    }

    @IBAction func getData(sender : AnyObject){

        println("--> Get Data from API")
        api.getInfoFromAPI()

    }
}

E meu controlador de API:

import UIKit
import Foundation

protocol APIControllerProtocol {
    func didReceiveAPIResults(results: NSDictionary)
}

class APIController: NSObject {

    var delegate: APIControllerProtocol?

    init(delegate: APIControllerProtocol?) {
        self.delegate = delegate
    }


    func getInfoFromAPI(){

        let session = NSURLSession.sharedSession()
        let url = NSURL(string: "https://itunes.apple.com/search?term=Bob+Dylan&media=music&entity=album")

        let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
            if(error) {
                println("There was a web request error.")
                return
            }

            var err: NSError?

            var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.    MutableContainers, error: &err) as NSDictionary

            if(err?) {
                println("There was a JSON error.")
                return
            }

            self.delegate?.didReceiveAPIResults(jsonResult)
        })
        task.resume()


    }    
}

ATUALIZAÇÃO: Consegui trabalhar com base na resposta de Ethan. Abaixo está o código exato que acabou obtendo o comportamento desejado. Eu precisava atribuirthat paraself ter acesso a si mesmo dentro dodispatch_async quadra.

let that = self

if(NSThread.isMainThread()){
    self.delegate?.didReceiveAPIResults(jsonResult)

}else
{
    dispatch_async(dispatch_get_main_queue()) {
        println(that)
        that.delegate?.didReceiveAPIResults(jsonResult)
    }
}

Curiosamente, esse código não funciona se eu remover oprintln(that) linha! (A construção falha comcould not find member 'didReceiveAPIResults') Isso é muito curioso, se alguém poderia comentar sobre isso ...

questionAnswers(2)

yourAnswerToTheQuestion