问题描述
我正在使用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。
,我做了什么
- 如果没有互联网,则将数据存储在数据库中
- 在appdelegate中创建函数,例如callApi()
- 当应用程序进入在线{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")
}
}
我在全球使用可达性课程