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

How to call api after app comes to online from other screen

我正在处理 iOS 申请。我必须在用户在线和离线时调用 api。

我有 viewcontroller 1 class 我正在呼叫 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 class 并且应用程序上线,问题就在这里, api 在 Viewcontroller 1 中没有触发。 要求是,如果用户离线并上线,用户在 viewcontroller 2,我必须在 viewcontroller 1 中调用 api 而不采取任何操作,只需跟踪互联网是否处于活动状态我必须打电话给 API.

有什么建议吗?

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

如果您没有理由必须在连接更改时将调用 API 保留在视图控制器 1 中,我建议将观察者移动到可以在您的应用程序的整个生命周期中存活的某个地方。最简单的地方在AppDelegate.

我做了什么,

  1. 如果没有互联网则将数据存储在数据库中
  2. 在 appdelegate 中创建一个函数,例如 callApi()
  3. 当应用程序上线(互联网)时reachabilityChanged( notification: NSNotification )调用,所以我的代码看起来像

@objc func reachabilityChanged(注意:通知){

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")
}
}

我在全球范围内使用可达性class