使用程序化 segue 挑战 ImageView
Challenge with ImageView with programatic segue
我在我的 Swift iOS 项目中遇到了一个真正的挑战,我似乎无法找到解决方案。我希望有人可以重现我的问题,并可能就解决方案或解决方法提出建议。
总结一下我的问题:
我在故事板中有 2 个视图控制器。第一个视图控制器包含 3 个按钮,第二个视图控制器只包含一个图像视图。我在第一个视图控制器的第一个按钮到第二个视图控制器上创建了一个 segue,当我单击该按钮时,它运行良好。
对于我的第二个按钮,我以编程方式调用 segue。首先,我在属性检查器中为 segue 分配了一个 ID (MySegue),然后在我的视图控制器中使用一个方法,我调用了 segue。当我点击第二个按钮时,它完美运行。
@IBAction func doSegue(sender: AnyObject) {
self.performSegueWithIdentifier("MySegue", sender: nil)
}
对于我的第三个按钮,我想获取一些网络数据,只有在成功后才执行转场。我正在使用 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 中都尝试过,结果也一样...
在此先感谢您的帮助。
此致,
乔恩
dataTaskWithRequest 完成处理程序不在主线程上执行。
尝试在主线程上调用 performSegueWithIdentifier:
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("MySegue", sender: nil)
}
我在我的 Swift iOS 项目中遇到了一个真正的挑战,我似乎无法找到解决方案。我希望有人可以重现我的问题,并可能就解决方案或解决方法提出建议。
总结一下我的问题:
我在故事板中有 2 个视图控制器。第一个视图控制器包含 3 个按钮,第二个视图控制器只包含一个图像视图。我在第一个视图控制器的第一个按钮到第二个视图控制器上创建了一个 segue,当我单击该按钮时,它运行良好。
对于我的第二个按钮,我以编程方式调用 segue。首先,我在属性检查器中为 segue 分配了一个 ID (MySegue),然后在我的视图控制器中使用一个方法,我调用了 segue。当我点击第二个按钮时,它完美运行。
@IBAction func doSegue(sender: AnyObject) {
self.performSegueWithIdentifier("MySegue", sender: nil)
}
对于我的第三个按钮,我想获取一些网络数据,只有在成功后才执行转场。我正在使用 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 中都尝试过,结果也一样...
在此先感谢您的帮助。
此致, 乔恩
dataTaskWithRequest 完成处理程序不在主线程上执行。
尝试在主线程上调用 performSegueWithIdentifier:
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("MySegue", sender: nil)
}