应用程序从其他屏幕上线后如何调用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")
}
}

我在全球使用可达性课程