Objective c 连接wifi时的通知(OS X)

Objective c 连接wifi时的通知(OS X),objective-c,macos,wifi,Objective C,Macos,Wifi,当机场连接到ap时,我需要系统的通知。使用SystemConfiguration框架是否有可能做到这一点?我在理解systemconfigurations api文档时遇到问题。您使用SystemConfigurationNetwork的方法是正确的,它提供了一组功能。你可以尝试使用 SCNetworkReachabilitySetCallback 设置在可达性改变时调用的回调;及 SCNetworkReachabilityScheduleWithRunLoop 在运行循环中安排可达性检查

当机场连接到ap时,我需要系统的通知。使用
SystemConfiguration
框架是否有可能做到这一点?我在理解systemconfigurations api文档时遇到问题。

您使用SystemConfigurationNetwork的方法是正确的,它提供了一组功能。你可以尝试使用

SCNetworkReachabilitySetCallback
设置在可达性改变时调用的回调;及

SCNetworkReachabilityScheduleWithRunLoop
在运行循环中安排可达性检查

或者,您可以尝试使用构建在SystemConfiguration框架之上的(适用于MacOS和iOS)来简化(更高级别)

如果您想采用系统配置方式,那么可以通过以下方式检查当前的可访问性并安装回调以通知更改():

这是回调的一个示例:

static void networkReachabilityCallback(SCNetworkReachabilityRef target,
                SCNetworkConnectionFlags flags,
                void *object) {
  // Observed flags:
  // - nearly gone: kSCNetworkFlagsReachable alone (ignored)
  // - gone: kSCNetworkFlagsTransientConnection | kSCNetworkFlagsReachable | kSCNetworkFlagsConnectionRequired
  // - connected: kSCNetworkFlagsIsDirect | kSCNetworkFlagsReachable

  if (networkReachability == NULL)
    return;

  if ((flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired))    {

    if (isReachable) // typically receive a reachable message ~20ms before the unreachable one
    return;

    isReachable = YES;
    ncid_network_kill();
    [NSThread detachNewThreadSelector:@selector(runThread:) toTarget:object withObject:nil];

  } else {
    isReachable = NO;
    ncid_network_kill();
  }
}

为此,您需要使用Apple的可达性类

您可以检查此线程以了解如何使用此类-


应该注意的是,OP询问的是OSX,而不是iOS,而Apple address iOS发布的线程和可达性类。@sergio-遗漏了这一点,将被删除。我使用了可达性框架,它对我很有效。非常感谢。
static void networkReachabilityCallback(SCNetworkReachabilityRef target,
                SCNetworkConnectionFlags flags,
                void *object) {
  // Observed flags:
  // - nearly gone: kSCNetworkFlagsReachable alone (ignored)
  // - gone: kSCNetworkFlagsTransientConnection | kSCNetworkFlagsReachable | kSCNetworkFlagsConnectionRequired
  // - connected: kSCNetworkFlagsIsDirect | kSCNetworkFlagsReachable

  if (networkReachability == NULL)
    return;

  if ((flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired))    {

    if (isReachable) // typically receive a reachable message ~20ms before the unreachable one
    return;

    isReachable = YES;
    ncid_network_kill();
    [NSThread detachNewThreadSelector:@selector(runThread:) toTarget:object withObject:nil];

  } else {
    isReachable = NO;
    ncid_network_kill();
  }
}