如何解决应用程序从其他屏幕上线后如何调用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。
,我做了什么
- 如果没有互联网,则将数据存储在数据库中
- 在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")
}
}
我在全球使用可达性课程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。