微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应用程序从其他屏幕上线后如何调用api

如何解决应用程序从其他屏幕上线后如何调用api

我正在使用iOS应用程序。我必须在用户在线和离线时调用api。

我有viewcontroller 1类,在那里我正在调用api。

    override func viewDidLoad() {
            
            super.viewDidLoad()
     if let reachability = manager.sharedInstance.internetReachability {
                NotificationCenter.default.addobserver( self,selector: #selector( self.reachabilityChanged),name: Notification.Name.reachabilityChanged,object: reachability )
            }
        }

     @IBAction func callAPI(_ sender: Any) {
            
            self.callApi()
        }
    
    func callApi() {
      //call api
    }


@objc private func reachabilityChanged( notification: NSNotification ) {
    
    let reachability = notification.object as! Reachability
    switch reachability.connection {
    case .wifi:
        self.callApi()
        
    case .cellular:
        self.callApi()
        
    case .none:
        
    case .unavailable:
    }
}

如果我在Viewcontroller 2类中并且应用程序联机,则问题就在这里,该API在Viewcontroller 1中没有触发。 要求是,如果用户处于脱机状态并且联机,则用户位于viewcontroller 2中,则必须在没有任何操作的情况下在viewcontroller 1中调用该api,仅通过跟踪Internet是否处于活动状态就必须调用API。

有什么建议吗?

解决方法

问题是,如果在连接更改时不存在视图控制器1的实例,则您将没有机会调用该API。

如果在连接发生变化时不必将调用API保留在视图控制器1中,建议将观察者移动到整个应用程序生命周期内都可以存活的地方。最简单的地方是AppDelegate。

,

我做了什么

  1. 如果没有互联网,则将数据存储在数据库中
  2. 在appdelegate中创建函数,例如callApi()
  3. 当应用程序进入在线{internet} reachabilityChanged( notification: NSNotification )通话时,我的代码看起来像

@objc函数可访问性Changed(注意:通知){

let reachability = note.object as! Reachability

switch reachability.connection {
case .wifi:
    print("Reachable via WiFi")
    appDel.UploadUserRecord() //callApi()
    case .cellular:
    print("Reachable via Cellular")
    appDel.UploadUserRecord() //callApi()
case .unavailable:
    print("Network not reachable")
case .none:
    print("Network none")
}
}

我在全球使用可达性课程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。