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

| 首先,我要强调的是我所说的是Mac OS X SDK,而不是iPhone。 为了确定\“ connectivity \”并获取标志,我做类似的事情:
#import <SystemConfiguration/SystemConfiguration.h>
const char *hostName = [@\"google.com\" cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithName(NULL, hostName);
SCNetworkConnectionFlags flags = 0;
SCNetworkReachabilityGetFlags(target, &flags);
这样做正好-获取有关Google可达性的信息(这正是我想知道的信息)。 有没有办法向更改添加观察者?我一直在研究ѭ1,但是我发现来自Apple的单个示例和文档有些让人不知所措。 理想情况下,我希望能够设置一个用于标志更改的功能,但这就足够了:请注意何时“丢弃” /释放IP以及何时获取IP。 (然后,我可以对在获得的IP上触发的函数中进行硬编码的可达性)。 请不要犹豫,要求详细说明。     
已邀请:
        是的,您可以使用
SCNetworkReachabilitySetCallback
SCNetworkReachabilityScheduleWithRunLoop
。除非要专门观看特定的网络接口,否则不需要使用ѭ1。 如果您想看一个完整的示例,则可以看到我对NCIDpop(网络呼叫者ID显示器)所做的工作。在此文件中搜索“ 5”。
networkReachabilityCallback
函数中的注释使您对预期的状态转换有一些了解(在编写该代码时,这些转换并没有得到很好的记录)。     
        使用Apple Reachability示例代码中的Reachability类。 了解理解可达性是一个很好的例子 它会更容易使用(并且将是Objective-C而不是普通C) 特别是此示例使SCReachability在可达性更改时发布名为post7ѭ的通知,因此您可以使用以下方法轻松地将自己添加为该通知的侦听器:
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
您可以在项目中复制/粘贴Reachability.h和.m文件(实际上,这是每个人都要做的;我不知道为什么Apple不直接在其框架中添加此Obj-C类!) 注意:如果您仍然想使用普通C语言,您也可以自己调用ѭ2(如上述Apple示例中的操作),并为其提供一个指向实现代码的C函数的指针。如果这样做,请不要忘记安排RunLoop的可达性以启动观察过程,并在完成后将其从RunLoop中删除。     

要回复问题请先登录注册