ImageView与程序设计的挑战

时间:2015-07-18 16:06:07

标签: ios xcode swift interface-builder segue

我在我的一个Swift iOS项目中遇到了一个真正的挑战,我似乎无法找到解决方案。我希望有人可以重新创建我的问题,并可能就解决方案或解决方法提出建议。

总结我的问题:

我在故事板中有2个视图控制器。第一个视图控制器包含3个按钮,第二个视图控制器只包含一个图像视图。我在第一个视图控制器的第一个按钮上创建了一个segue到第二个视图控制器,当我点击按钮时,它完美地工作。

对于我的第二个按钮,我以编程方式调用segue。首先,我在属性检查器中为segue分配了一个ID(MySegue),然后使用视图控制器中的方法,我调用了segue。当我点击第二个按钮时,它可以很好地工作。

@IBAction func doSegue(sender: AnyObject) {

    self.performSegueWithIdentifier("MySegue", sender: nil)
}

对于我的第三个按钮,我想获取一些网络数据,并且只有在成功执行segue时才能获得。我正在利用NSURLSession来获取执行segue的完成处理程序的数据。然而,我的问题是当我点击第三个按钮时,无论我尝试什么,图像视图都不会显示。如果我添加按钮,标签或其他任何东西,它们会显示正常但不是图像。这是我的按钮代码:

@IBAction func doNSURLSession(sender: AnyObject) {

    let requestURL: NSURL = NSURL(string: "https://www.google.com")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in

        if error == nil {

            NSLog("Success!")
            self.performSegueWithIdentifier("MySegue", sender: nil)

        } else {

            NSLog("Fail")

        }

    }

    task.resume()

}

我已尽力解决这个问题。我可以在一个方法中以编程方式执行segue并且它工作正常但是如果我调用此segue,或者甚至调用从Web请求的完成处理程序调用此segue的方法,则图像视图不会显示。有没有人对我做错了什么,或者我能看到的任何地方有任何想法?

我在XCode6和XCode 7 BETA都尝试了这两种方法,两者都有相同的结果......

提前感谢您的帮助。

此致 乔恩

1 个答案:

答案 0 :(得分:0)

dataTaskWithRequest完成处理程序不在主线程上执行。

尝试在主线程上调用performSegueWithIdentifier:

dispatch_async(dispatch_get_main_queue()) {
    self.performSegueWithIdentifier("MySegue", sender: nil)
}