Ios 在Swift中使用prepareForSegue时,它不会在第一次单击单元格时正确加载数据

Ios 在Swift中使用prepareForSegue时,它不会在第一次单击单元格时正确加载数据,ios,swift,Ios,Swift,使用下面的函数,它不会在第一次单击单元格时加载从getMore函数检索的图片或文本。如果我点击单元格,它将不会加载,直到我点击后退按钮并重新点击单元格。获取更多功能设置电子邮件地址、生日、地址和图片的url override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var indexpath : NSIndexPath = self.tableView.indexPathForSelecte

使用下面的函数,它不会在第一次单击单元格时加载从getMore函数检索的图片或文本。如果我点击单元格,它将不会加载,直到我点击后退按钮并重新点击单元格。获取更多功能设置电子邮件地址、生日、地址和图片的url

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var indexpath : NSIndexPath = self.tableView.indexPathForSelectedRow!

    var destViewController = segue.destinationViewController as! SecondView
    let row: Int = indexpath.row
    getMore(row)
    destViewController.nameString = namesArray[row]
    destViewController.companyString = companyArray[row]
    destViewController.homeNumber = homeNumber[row]
    destViewController.workNumber = workNumber[row]
    destViewController.mobileNumber = mobileNumber[row]

    destViewController.emailAddress = self.email
    if let url = NSURL(string: self.largeImageURL) {
        if let data = NSData(contentsOfURL: url) {
           let image1 = UIImage(data: data)
            destViewController.pic = image1!
        }        
    }


    destViewController.birthday = birthDate[row]
    destViewController.address = self.street + self.city + self.state + self.country + self.zip

}

我猜您的函数getMore异步加载数据,因此在设置变量时数据可能不可用


当然,您可以在getMore函数中传递一个闭包,在这个函数中,您将设置所有必要的变量,并在数据完全加载时使用此闭包,但在这种情况下,您将阻塞UI。我建议将函数getData移到SecondView中,并在viewDidLoad中调用它

您需要从主线程加载图像url

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var indexpath : NSIndexPath = self.tableView.indexPathForSelectedRow!

    var destViewController = segue.destinationViewController as! SecondView
    let row: Int = indexpath.row
    getMore(row)
    destViewController.nameString = namesArray[row]
    destViewController.companyString = companyArray[row]
    destViewController.homeNumber = homeNumber[row]
    destViewController.workNumber = workNumber[row]
    destViewController.mobileNumber = mobileNumber[row]

    destViewController.emailAddress = self.email

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        if let url = NSURL(string: self.largeImageURL) {
            if let data = NSData(contentsOfURL: url) {
                dispatch_async(dispatch_get_main_queue()) {
                    destViewController.pic = UIImage(data: data)
                }
            }
        }
    }

    destViewController.birthday = birthDate[row]
    destViewController.address = self.street + self.city + self.state +      self.country + self.zip

}

你能发布
getMore
吗?我喜欢FirstViewController中有太多变量使getData功能正常的想法work@PaulDragich,太多的变量意味着您需要更好地解耦函数。制作一个包含所有变量的简单结构,并将其传递到getMore函数中。