iOS中的无线配件配置:EAWiFiUnconfiguredAccessoryBrowser仅会检测未配置的配件一次

9

我正在使用 EAWiFiUnconfiguredAccessoryBrowser 来检测 EAWiFiUnconfiguredAccessory。启动配件搜索的代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];

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

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

不幸的是,它只在首次加载视图时找到附件。如果我返回到上一个视图,然后重新加载视图,它就无法找到它们。

我尝试过:

  • 重新创建浏览器附件并重新启动搜索(不起作用)
  • 停止搜索并重新启动它(不起作用)

这是我得到的最新代码(请参考上面的代码):

- (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];
}

看起来配件列表信息在APP中的某个地方被缓存了。如果我重新启动APP,它就会找到它们,所以我想我可能错过了什么。

需要帮助吗?


是的,我最终放弃了这个项目的一部分,转而关注其他事情,希望有人能找到答案。如果你成功找到原因,请及时通知我更新。 - mm24
官方的Apple示例也有同样的问题。https://developer.apple.com/library/ios/samplecode/HomeKitCatalog/Introduction/Intro.html#//apple_ref/doc/uid/TP40015048 - Adinp
额额...苹果...他们有数十亿,但这种事情还是发生了,希望他们能尽快解决。 - mm24
在视图加载后几秒钟尝试重新加载数据。我发现有时列表会更新,但您不会收到通知。 - msgambel
3个回答

5

我有同样的问题...你应该使用 unconfiguredAccessories 数组。另外,尝试保持浏览器实例活动状态。如果你发现设备一次后重新实例化浏览器,你将无法再次找到它。


2
EAWiFiUnconfiguredAccessoryBrowser存在问题,在某些情况下无法提供可靠的结果。我认为你应该尝试这个。
 - (void) viewWillAppear:(BOOL)animated{
       NSLog(@"view will appear");
       if (_accessories != nil) {
          [_accessories removeAllObjects];
       }

       [self.tableView reloadData];
       [self initializeBrowswerAndStartSearch];
  }

以下方法会使浏览器对象为空并重新初始化,这样浏览器对象将始终返回更新的(即正确的)值。对我来说它完美地工作了。
 -(void) initializeBrowswerAndStartSearch    
 {
       // Make EAWiFiUnconfiguredAccessoryBrowser  object nil and reinitiate ,start searching again 
       _browser = nil;
      _browser = [[EAWiFiUnconfiguredAccessoryBrowser alloc]      initWithDelegate:self queue:nil];
      [_browser startSearchingForUnconfiguredAccessoriesMatchingPredicate:nil];
 }

如果您觉得EAWiFiUnconfiguredAccessoryBrowser没有提供适当的结果,随时可以尝试以下方法。


1

我也遇到了这个问题。所以我建立了一个名为WAC服务的单例,然后你可以在应用程序生命周期内保持这个单例活动。无论何时你想要加载未配置的附件,只需从[_browser unconfiguredAccessories]中加载即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接