gpt4 book ai didi

ios - 在 Swift 中使用 Reachability、NSNotification 和 Network Link Conditioner 检测网络连接变化

转载 作者:行者123 更新时间:2023-11-28 08:07:16 24 4
gpt4 key购买 nike

从 iOS 12 开始,您只需使用 NWPathMonitor,这是一行代码 (example)。

出于历史目的:


我正在尝试将网络连接检测集成到我的应用程序中,但是似乎我在某个地方犯了一个错误,因为我的网络更改没有被检测到/打印到控制台.

如帖子中所述,我目前正在使用以下这些类和工具来完成这项工作:

  1. 可达性 {.h, .m}
  2. NSNotificationCenter
  3. 网络链接调节器

代码

AppDelegate.Swift 中,我设置了 NSNotificationCenter 来检测变化:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// ...
// A: Checks if the device is connected to the internet

var defaultCenter: Void = NSNotificationCenter().addObserver(self, selector:"checkForReachability", name: kReachabilityChangedNotification, object: nil)

}

在同一个类 AppDelegate 中,我还创建了这个函数,只要有变化就会触发:

func checkForReachability () {

var networkReachability = Reachability.reachabilityForInternetConnection()
networkReachability.startNotifier()

var remoteHostStatus = networkReachability.currentReachabilityStatus()
if (remoteHostStatus.value == NotReachable.value) {
println("Not Reachable")
} else if (remoteHostStatus.value == ReachableViaWiFi.value) {
println("Reachable via Wifi")
} else {
println("Reachable")
}
}

但是,当使用网络链接调节器来操纵和模拟条件变化时,我无法在控制台中看到任何这些变化。任何帮助都会膨胀!

最佳答案

您必须创建一个 Reachability 对象,您才能从它接收通知。此外,请务必对您创建的 Reachability 对象调用 startNotifier() 方法。这将是如何在您的应用程序委托(delegate)中执行此操作的示例:

class AppDelegate: UIResponder, UIApplicationDelegate
{
private var reachability:Reachability!;

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
{
NSNotificationCenter.defaultCenter().addObserver(self, selector:"checkForReachability:", name: kReachabilityChangedNotification, object: nil);

self.reachability = Reachability.reachabilityForInternetConnection();
self.reachability.startNotifier();
}

@objc func checkForReachability(notification:NSNotification)
{
// Remove the next two lines of code. You cannot instantiate the object
// you want to receive notifications from inside of the notification
// handler that is meant for the notifications it emits.

//var networkReachability = Reachability.reachabilityForInternetConnection()
//networkReachability.startNotifier()

let networkReachability = notification.object as Reachability;
var remoteHostStatus = networkReachability.currentReachabilityStatus()

if (remoteHostStatus.value == NotReachable.value)
{
println("Not Reachable")
}
else if (remoteHostStatus.value == ReachableViaWiFi.value)
{
println("Reachable via Wifi")
}
else
{
println("Reachable")
}
}
}

我建议您查看 NSNotificationCenter 的文档和 NSNotification .这样,下次出现类似情况时,您将更加熟悉如何使用通知。

swift 3

NotificationCenter.default.addObserver(self, selector:Selector(("checkForReachability:")), name: NSNotification.Name.reachabilityChanged, object: nil)
let reachability: Reachability = Reachability.forInternetConnection()
reachability.startNotifier()

关于ios - 在 Swift 中使用 Reachability、NSNotification 和 Network Link Conditioner 检测网络连接变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44753127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com