如果URL无法加载,则取消加载视图控制器-Swift 4

如果URL无法加载,则取消加载视图控制器-Swift 4,swift,swift4,Swift,Swift4,加载视图控制器时,它必须通过URL获取JSON文件。如果internet已关闭,我希望它取消加载视图控制器。这是到目前为止的代码,我知道这是错误的捕获,但它给你一个想法,我需要做什么。所以总体而言,我应该使用不同于viewDidLoad()的覆盖,因为它“确实”加载了 重写func viewDidLoad(){ var jsonText=“” 如果让url=url(字符串):http://thedomain.com/eventlistjson_r2.asp") { 做{ jsonText=try

加载视图控制器时,它必须通过URL获取JSON文件。如果internet已关闭,我希望它取消加载视图控制器。这是到目前为止的代码,我知道这是错误的捕获,但它给你一个想法,我需要做什么。所以总体而言,我应该使用不同于viewDidLoad()的覆盖,因为它“确实”加载了

重写func viewDidLoad(){ var jsonText=“” 如果让url=url(字符串):http://thedomain.com/eventlistjson_r2.asp") { 做{ jsonText=try字符串(内容:url,编码:.utf8) }抓住{ //无法加载内容 打印(错误) super.disclose(动画:true) } }否则{ //网址不好! 打印(“URL不正确”) } } 这个

阻止主线程,因此当用户单击vc上推动该vc的按钮时,用户会觉得应用程序没有运行,您应该做的是在该主vc内

// add loading 
// make the call in a background thread such as URLSession.shared or Alamofire
// then decide inside the callback whether to proceed with push/segue or stay in that mainVC
此外,还将解雇

self.dismiss(animated: true) // not super 

如果没有数据,你的视图控制器是没有意义的,也许你应该考虑先尝试获取数据,然后决定是否推/呈现<代码> UIViewController < /代码>。 在这种情况下,实例化视图控制器的人首先尝试检索JSON,并且只有在成功实例化并将数据传递给所述视图控制器的情况下

第二种选择是,视图控制器检查数据本身,如果没有找到,则在解除自身之前向用户提供信息。您可以通过以下方式实现这一目标:

  • 直接在视图控制器的视图中显示信息(然后
    viewDidLoad()
    将是合适的位置),并允许用户通过按后退按钮返回导航
  • 显示UIAlertController,视图控制器将在按下警报确认按钮时自动关闭
  • 无论如何,在没有任何反馈的情况下加载和卸载视图控制器会导致UX或设计不佳


    如果您向我们提供更多关于背后逻辑和预期行为的详细信息,或许我可以尝试提供更好的答案,但我相信上述任何方法都是一个良好的开端。

    我认为您的第二个选项最适合我的情况,因为我希望将该视图控制器的代码保留在视图控制器中。我所能做的就是在视图控制器中的其他对象上覆盖一个屏幕,其中包含错误文本和一个后退按钮,如您所建议的。
    // add loading 
    // make the call in a background thread such as URLSession.shared or Alamofire
    // then decide inside the callback whether to proceed with push/segue or stay in that mainVC
    
    self.dismiss(animated: true) // not super