刷新时的可达性问题
Posted
技术标签:
【中文标题】刷新时的可达性问题【英文标题】:Reachability issue while refreshing 【发布时间】:2018-02-15 11:01:40 【问题描述】:首先是我的代码
func checkInternetConnection()
reachability.whenReachable = _ in
self.loadPost()
self.checkNewMessages()
self.slowView.frame.size.height = 0
self.slowView.isHidden = true
self.internetStatus.text = ""
self.slowView.layer.zPosition = 0
reachability.whenUnreachable = _ in
self.refreshControl.endRefreshing()
self.slowView.backgroundColor = #colorLiteral(red: 1, green: 0.1491314173, blue: 0, alpha: 1)
self.slowView.layer.zPosition = 1
self.slowView.frame.size.height = 40
self.slowView.isHidden = false
self.internetStatus.text = "Keine Internetverbindung!"
self.activityIndicatorView.stopAnimating()
self.Indicator.stopAnimating()
NotificationCenter.default.addObserver(self, selector: #selector(self.internetChanged(note:)), name: Notification.Name.reachabilityChanged, object: self.reachability)
do
try self.reachability.startNotifier()
catch
print("error")
@objc func internetChanged(note: Notification)
let reachability = note.object as! Reachability
if reachability.connection != .none
self.slowView.backgroundColor = #colorLiteral(red: 0.3411764801, green: 0.6235294342, blue: 0.1686274558, alpha: 1)
self.slowView.layer.zPosition = 1
self.slowView.frame.size.height = 40
self.slowView.isHidden = false
self.internetStatus.text = "Mit dem Internet verbunden!"
DispatchQueue.main.asyncAfter(deadline: .now() + 3 , execute:
self.slowView.layer.zPosition = 0
self.slowView.frame.size.height = 0
)
else
print("kein internet")
我在 viewDidLoad() 中调用了 checkInternetConnection() 方法,它工作正常,但是一旦我刷新我的 tableview,它就不会进入可达性闭包。
在 handleRefresh() 中(仅用于重新加载帖子即可正常工作)调用 checkInternetConnection() 方法但不会触发任何代码,该问题仅在刷新时出现,而不是在初始加载时出现。
我将此视频用作参考: https://www.youtube.com/watch?v=wDZmz9IsB-8 有什么建议吗?
【问题讨论】:
【参考方案1】:我认为(但不是 100% 确定)闭包 whenReachable
和 whenUnreachable
仅在发生适当的可达性更改时才被调用;此外,它们可能会在分配时被自动调用。因此,无论您多久调用一次checkInternetConnection
,除非设备离线/在线,否则关闭不会重新执行。
为了解决这个问题,我建议改用可达性标志:
if reachability.isReachable
// update view for reachable state
else
// update view for unreachable state
【讨论】:
首先谢谢,现在效果更好了。我现在的问题是,当我再次连接到互联网并刷新时,我的应用程序崩溃(索引超出范围)。当我等待 5 秒直到我刷新时,这不会发生吗?我可以通过延迟加载来解决这个问题,但我想这会做得不好,而且不是最好的解决方案,有什么想法可以解决这个问题吗? 好吧,找出无效访问发生的位置...这是一个单独的问题,与您的原始问题无关,因此您应该尝试将其分开并 - 如果需要 - 创建一个新问题问题。以上是关于刷新时的可达性问题的主要内容,如果未能解决你的问题,请参考以下文章