获取在线/离线可达性通知

Jos*_*osh 5 macos cocoa notifications objective-c reachability

首先我要强调的是,我所说的是Mac OS X SDK,而不是 iPhone.

为了确定"连通性"并获得标志,我做了类似的事情:

#import <SystemConfiguration/SystemConfiguration.h>
const char *hostName = [@"google.com" cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithName(NULL, hostName);
SCNetworkConnectionFlags flags = 0;
SCNetworkReachabilityGetFlags(target, &flags);
Run Code Online (Sandbox Code Playgroud)

这样做很好 - 获取有关Google可达性的信息(这正是我想知道的).

有没有办法为变化添加观察者?我一直在研究SCDynamicStore,但我发现Apple 的单一示例和文档有点压倒性.

理想情况下,我希望能够为标志更改设置一个函数,但这就足够了:注意IP被"删除"/释放,以及何时获得.(然后我可以在获得的IP上触发的函数中进行硬编码的可达性).

请不要犹豫,要求详细说明.

Nic*_*ley 8

是的,你可以使用SCNetworkReachabilitySetCallbackSCNetworkReachabilityScheduleWithRunLoop.SCDynamicStore除非您要专门观看特定的网络接口,否则无需使用.

如果你想看一个完整的例子,你可以看到我为NCIDpop(一个网络来电显示器)做了什么.SCNetworkReachability此文件中搜索.networkReachabilityCallback函数中的注释可以让您了解所期望的状态转换(当我编写该代码时,这些转换并未得到很好的记录).