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

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-01 08:48:09

问题


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.

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?


回答1:


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




回答2:


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.




回答3:


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].



来源:https://stackoverflow.com/questions/31804609/wireless-accessory-configuration-in-ios-eawifiunconfiguredaccessorybrowser-will

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!