ios – 使用swift根据任务结果切换视图

ios – 使用swift根据任务结果切换视图,第1张

概述我正在使用NSURLSession向服务器发出请求.为此,我使用自定义completionHandler创建NSURLSessionTask. 根据结果​​,我想切换到另一个视图.但是,当我在完成处理程序中执行此 *** 作时,它不起作用.该应用程序崩溃,出现以下错误: NSInternalInconsistencyException 完整的错误描述如下: *** Assertion failure in 我正在使用NSURLSession向服务器发出请求.为此,我使用自定义completionHandler创建NSURLSessionTask.

根据结果​​,我想切换到另一个视图.但是,当我在完成处理程序中执行此 *** 作时,它不起作用.该应用程序崩溃,出现以下错误:

NSInternalinconsistencyException

完整的错误描述如下:

*** Assertion failure in -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished],/SourceCache/UIKit_Sim/UIKit-3302.3.1/Keyboard/UIKeyboardTaskQueue.m:374*** Terminating app due to uncaught exception 'NSInternalinconsistencyException',reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'

注意:要更改视图,请使用以下代码

let vc: AnyObject! = self.storyboard?.instantiateVIEwControllerWithIDentifIEr(vIEwID)self.showVIEwController(vc as UIVIEwController,sender: vc)

这有什么不对?

解决方法 主要问题是您的错误消息是报告“……可能只能从主线程调用”.因此,您可能已经在后台线程中调用了此代码(可能是网络请求的完成块或类似的东西).所以你必须将这段代码发送回主队列:

dispatch_async(dispatch_get_main_queue()) {    let vc = self.storyboard.instantiateVIEwControllerWithIDentifIEr(vIEwID) as UIVIEwController    showVIEwController(vc,sender: self)}

请注意,此代码段会进行一些次要的,无关的更改,即:

>将目标视图控制器指定为自己的发送方没有意义.通常你会使用当前的视图控制器或一些UIKit控件作为发送者.

我指定self作为发送者,因为我假设你在源视图控制器中执行了此 *** 作.或者,如果这是一个按钮的IBAction,也许你会使用IBAction的sender参数,而不是源视图控制器.>我会失去AnyObject演员阵容.我知道编译器可能会建议你,但它没有帮助代码的易读性.我建议直接将它转换为UIVIEwController.

总结

以上是内存溢出为你收集整理的ios – 使用swift根据任务结果切换视图全部内容,希望文章能够帮你解决ios – 使用swift根据任务结果切换视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1000363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存