可达性更改通知应仅调用一次
Reachability change notification should be called only once
我在 swift 项目中使用可达性。我在 AppDelegate
中有以下代码
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: ReachabilityChangedNotification, object: reachability)
reachability.startNotifier()
它确实调用了
func reachabilityChanged(note: NSNotification) {
}
但我的问题是,它正在为所有请求调用。也就是说,我正在从服务器加载图像,因此当网络可达性发生变化时,这是方法 get 对所有请求的调用。我希望这个方法只被调用一次。
我也曾尝试在ViewController中添加此通知和方法,但没有成功。
如有任何帮助,我们将不胜感激。提前致谢
你可以添加一个标志来防止代码被执行,除非状态发生了这样的变化:
var connectionState = "Connected"
let connectedState = "Connected"
let notConnectedState = "notConnected"
func checkForReachability(notification:NSNotification)
{
let networkReachability = notification.object as! Reachability;
var remoteHostStatus = networkReachability.currentReachabilityStatus()
if remoteHostStatus.value == NotReachable.value && connectedState == connectedState {
connectionState = notConnectedState
println("State Changed Not Connected")
} else if remoteHostStatus.value == ReachableViaWiFi.value && connectedState == notConnectedState {
connectionState = connectedState
println("State Changed Connected")
}
}
我在 swift 项目中使用可达性。我在 AppDelegate
中有以下代码NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: ReachabilityChangedNotification, object: reachability)
reachability.startNotifier()
它确实调用了
func reachabilityChanged(note: NSNotification) {
}
但我的问题是,它正在为所有请求调用。也就是说,我正在从服务器加载图像,因此当网络可达性发生变化时,这是方法 get 对所有请求的调用。我希望这个方法只被调用一次。
我也曾尝试在ViewController中添加此通知和方法,但没有成功。
如有任何帮助,我们将不胜感激。提前致谢
你可以添加一个标志来防止代码被执行,除非状态发生了这样的变化:
var connectionState = "Connected"
let connectedState = "Connected"
let notConnectedState = "notConnected"
func checkForReachability(notification:NSNotification)
{
let networkReachability = notification.object as! Reachability;
var remoteHostStatus = networkReachability.currentReachabilityStatus()
if remoteHostStatus.value == NotReachable.value && connectedState == connectedState {
connectionState = notConnectedState
println("State Changed Not Connected")
} else if remoteHostStatus.value == ReachableViaWiFi.value && connectedState == notConnectedState {
connectionState = connectedState
println("State Changed Connected")
}
}