Swift - Segue 未传递正确的数据

Swift - Segue not being passed correct data

swift 很新。目前,我有一个程序,在单击按钮时我发出 NSURL 请求,获取该响应,解析 XML,并将我需要的数据存储到数组 [String] 中。按下这个按钮也可以作为一个 segue 到 table 视图控制器,它将动态填充数组中的信息。

我所看到的是,在我的请求完成和响应被解析之前,正在发生 segue 并且下一个 VC 正在传递一个空数组。 (这一切都基于我在几乎每隔一行中插入的打印语句,以跟踪我的代码的执行情况)。

我怎样才能做到这一点,以便在我的响应被解析之前,segue 不会将我带到下一个 VC?

class start: UIViewController, NSURLConnectionDelegate, NSXMLParserDelegate  {

var timeArr:[String] = []
var url = "myurl.com" 
@IBOutlet weak var get2: UIButton!
@IBAction func getAction(sender: UIButton) {


    var request = NSMutableURLRequest(URL: NSURL(string: url)!)
    httpGet (request) {
        (data, error) -> Void in
        if error != nil {
            print(error)
            mainInstance.arrivalArr.append("no arrival times")
        } else {
            self.beginParsing()
            print(data)
        }
    }
}


func httpGet(request: NSURLRequest!, callback: (String, String?) -> Void) {
    var session = NSURLSession.sharedSession()
    var task = session.dataTaskWithRequest(request){
        (data, response, error) -> Void in
        if error != nil {
            callback("", error!.localizedDescription)
        } else {
            var result = NSString(data: data!, encoding:
                NSUTF8StringEncoding)!
            self.data2 = data!
            callback(result as String, nil)
        }
    }
  task.resume()
}


func beginParsing()
{
    posts = []
    parser = NSXMLParser(data: data2)
    parser.delegate = self
    parser.parse()
}

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
    element = elementName
    if (elementName as NSString).isEqualToString("prd")
    {
        // more code
    }
}

func parser(parser: NSXMLParser, foundCharacters string: String)
{
    if element.isEqualToString("prdtm") {
        //code 

    }
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
    if (elementName as NSString).isEqualToString("prd") {
        if !title1.isEqual(nil) {
            //code
        }

       //code
        finalTimeStr = getTime(finalTimeStr)
        timeArr.append(finalTimeStr)

    }
}



func getTime (time: String) -> String{
    var arrivalTime = time
    //code to trim and format time here
    var timeA = getTimeDiff(arrivalTime)
    timeA = trimToMin(timeA)
    return timeA
}



func trimToMin (timeToTrim : String) -> String {
    var timeInMin = timeToTrim
    //code to trim to minutes
    return substring2
}

func getTimeDiff (time: String) -> String{
    //code to find time difference
    let ret = stringFromTimeInterval(diff)       
    return ret
}

func stringFromTimeInterval(interval: NSTimeInterval) -> String {
    //code to format interval
    return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let CDview = segue.destinationViewController as? ListView {
        CDview.timeArr = timeArr
        //CDview.timeArr = mainInstance.arrivalArr
    }
}


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

override func viewWillAppear(animated: Bool) {
   timeArr = testArr

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

} 不知道我哪里出错了。这特别令人困惑,因为如果我使用硬编码字符串并直接跳转到 getTimeDiff,那么它工作得很好,我的 table 下一个 VC 视图看起来也很棒。将不胜感激任何帮助。在过去的 12 个小时里,我确实移动了这段代码,试图理解为什么它不起作用。

在情节提要中添加来自视图控制器(而不是来自 UIButton)的转场。并根据需要命名(情节提要标识符)。解析数据后,使用 performSegue(...) 以编程方式执行 segue。