Обнаружение изменений оборудования / сетевого адаптера

Можно ли обнаружить изменения оборудования? Я ищу уведомление об обновлении, которое отправляется при смене сетевых адаптеров (т.е. когда пользователь отключает свой MacBook).

Я уже погуглил, но ничего не нашел.

# macos networking cocoa
Источник
Codelisting
за 2 против
Лучший ответ

я использовалAFNetworking , и обнаружил, что его проще всего использовать для этого (прослушивание изменений адаптера)

#import <AFNetworking/AFNetworkReachabilityManager.h>

- (instancetype)init 
{
   self = [super init];
   if( self )
   {
      [[AFNetworkReachabilityManager sharedManager] startMonitoring];
      [[NSNotificationCenter defaultCenter] addObserver:self
                                            selector:@selector(reachabilityChanged:)
                                                name:AFNetworkingReachabilityDidChangeNotification
                                              object:nil];
   }
   return self;
}


-(void) dealloc
{
   [[NSNotificationCenter defaultCenter] removeObserver:self
                                                   name:AFNetworkingReachabilityDidChangeNotification
                                                 object:nil];
}

а затем реализовать обработчик:

- (void)reachabilityChanged:(NSNotification *)notification
{
   NSNumber *s = notification.userInfo[AFNetworkingReachabilityNotificationStatusItem];
   AFNetworkReachabilityStatus status = [s integerValue];

   //Check value of status here
}

Вот заголовок, в котором вы можете увидеть константы, используемые для статуса: https://github.com/AFNetworking/AFNetworking/blob/4fb051898c60051d207ca0c24435766fdf140e34/AFNetworking/AFNetworkReachabilityManager.h

Я также использовал SCReachability

   #import <SystemConfiguration/SystemConfiguration.h>

   BOOL networkAvailable = NO;
   const char *hostName = [NEVER_TRANSLATE(@"google.com") cStringUsingEncoding:NSASCIIStringEncoding];
   SCNetworkReachabilityFlags flags = 0;
   SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithName(NULL, hostName);

   if (SCNetworkReachabilityGetFlags(target, &flags))
   {
      if (flags == kSCNetworkFlagsReachable)
      {
         networkAvailable = YES;
      }
   }

Хотя я использовал это для определения доступности сети в определенное время, вместо того, чтобы регистрироваться в качестве слушателя, поэтому не уверен, что это будет делать то, что вы хотите.

Смежные вопросы
Codelisting
Популярные категории
На заметку программисту