Wireless accessory configuration in iOS: EAWiFiUnconfiguredAccessoryBrowser will detect unconfigured accessories only once

I am using EAWiFiUnconfiguredAccessoryBrowser to detect EAWiFiUnconfiguredAccessory. The code to start the accessory search it’s the following:

- (void)viewDidLoad {
    [super viewDidLoad];

    if (_accessories == nil) {
        _accessories = [[NSMutableArray alloc] init];
    }

    if (_browser == nil) {
        _browser = [[EAWiFiUnconfiguredAccessoryBrowser alloc] initWithDelegate:self queue:nil];
        _browser.delegate = self;
    }
}

Unfortunately it does find accessories only the first time the View loads. If I go back to the previous view and then reload the view it does not find them.

  • Captive Wifi Popup: Click a link to open Safari
  • How to get WiFi encryption mode on iOS/iPhone/iPad?
  • iOS API detect wireless networks
  • iOS: how to query WiFi state
  • Is there a (legal) way to capture the ENTIRE screen under iOS?
  • List / Scan for available WiFis iPhone
  • I tried:

    • recreating the browser accessory and restarting the search (does not work)
    • stopping the search and restarting it (does not work)

    This is the latest code I got (refer to this together with the code above):

    - (void) viewWillAppear:(BOOL)animated{
        NSLog(@"view will appear");
    
        if (_accessories != nil) {
            [_accessories removeAllObjects];
        }
    
        [self.tableView reloadData];
        [self initializeBrowswerAndStartSearch];
    }
    
    - (void) initializeBrowswerAndStartSearch{
        if (_browser != nil) {
            [_browser stopSearchingForUnconfiguredAccessories];
        }
    
        [_browser startSearchingForUnconfiguredAccessoriesMatchingPredicate:nil];
    }
    
    - (void) viewWillDisappear:(BOOL)animated{
        [_browser stopSearchingForUnconfiguredAccessories];
    }
    

    It seems that the accessory list information is cached somewhere within the APP. If I restart the APP it will find them so I guess there is something that I am missing.

    Any help?

    3 Solutions Collect From Internet About “Wireless accessory configuration in iOS: EAWiFiUnconfiguredAccessoryBrowser will detect unconfigured accessories only once”

    so i have the same problem..you should use the unconfiguredAccessories array. Also, try keeping the instance of the browser alive. If you discover the device once, and you re-instantiate the browser, you wont find it again

    EAWiFiUnconfiguredAccessoryBrowser has issues,and doesn’t provide reliable result in certain use cases. i think you should try this

     - (void) viewWillAppear:(BOOL)animated{
           NSLog(@"view will appear");
           if (_accessories != nil) {
              [_accessories removeAllObjects];
           }
    
           [self.tableView reloadData];
           [self initializeBrowswerAndStartSearch];
      }
    

    below method makes browser object nil and reinitialises it, in this case browser object will always return you updated(i.e, proper) values . it worked perfectly for me.

     -(void) initializeBrowswerAndStartSearch    
     {
           // Make EAWiFiUnconfiguredAccessoryBrowser  object nil and reinitiate ,start searching again 
           _browser = nil;
          _browser = [[EAWiFiUnconfiguredAccessoryBrowser alloc]      initWithDelegate:self queue:nil];
          [_browser startSearchingForUnconfiguredAccessoriesMatchingPredicate:nil];
     }
    

    anytime you feel EAWiFiUnconfiguredAccessoryBrowser isn’t providing proper result , try this.

    I also have this issue. So I build a singleton called WAC service, then you can keep this singleton alive during the app life cycle. Anywhere you want to load the unconfigured accissories. Just load it from [_browser unconfiguredAccessories].