我在我的一个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都尝试了这两种方法,两者都有相同的结果......
提前感谢您的帮助。
此致 乔恩
答案 0 :(得分:0)
dataTaskWithRequest完成处理程序不在主线程上执行。
尝试在主线程上调用performSegueWithIdentifier:
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("MySegue", sender: nil)
}