EAWiFiUnconfiguredAccessoryBrowser не обнаруживает внешние аксессуары во второй раз
Я реализую приложение Homekit, взяв пример приложения HMCatalog. Все хорошо, но в представлении добавления аксессуаров мы используем EAWiFiUnconfiguredAccessoryBrowser для обнаружения внешних аксессуаров. В этот первый раз все работает нормально, но если я вернусь и выйду вперед, это не отображает внешние аксессуары. В случае, если я удалю приложение HMCatalog из фона и перезапущу, оно будет работать нормально. В моем понимании, в приложении есть кеш. Но я не нашел никакого кода, связанного с кешем, в приложении. Спасибо за ценное время. Пожалуйста, помогите мне.
Код является:
// We can't use the ExternalAccessory framework on the iPhone simulator.
#if !TARGET_IPHONE_SIMULATOR
self.externalAccessoryBrowser = [[EAWiFiUnconfiguredAccessoryBrowser alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
#endif
[self startBrowsing];
#pragma mark - EAWiFiUnconfiguredAccessoryBrowserDelegate methods
- (void)accessoryBrowser:(EAWiFiUnconfiguredAccessoryBrowser *)browser didFindUnconfiguredAccessories:(NSSet *)accessories
{
[self reloadTable];
}
- (void)reloadTable
{
[self resetDisplayedAccessories];
dispatch_async(dispatch_get_main_queue(), ^{
[allDevicesTableView reloadData];
});
}
- (void)resetDisplayedAccessories
{
[self.displayedAccessories removeAllObjects];
[self.displayedAccessories addObjectsFromArray:[self allAccessories]];
}
- (NSArray *)allAccessories
{
NSMutableArray *allAccessories = [[NSMutableArray alloc] initWithCapacity:0];
NSArray *discoveredAccessories = self.accessoryBrowser.discoveredAccessories;
if (discoveredAccessories)
{
[allAccessories addObjectsFromArray:discoveredAccessories];
}
[allAccessories addObjectsFromArray:self.addedAccessories];
NSArray *externalAccessories = self.externalAccessoryBrowser.unconfiguredAccessories.allObjects;
if (externalAccessories)
{
// ExternalAcessory framework may still contain an accessory for a little while after it's been configured.
// If there is a HomeKit accessory with the same name as any external accessory, filter out the external accessory.
NSPredicate *existingHomeKitAccessoryPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return ![[allAccessories valueForKeyPath:@"@distinctUnionOfObjects.name"] containsObject:evaluatedObject];
}];
NSArray *filteredExternalAccessories = [externalAccessories filteredArrayUsingPredicate:existingHomeKitAccessoryPredicate];
[allAccessories addObjectsFromArray:filteredExternalAccessories];
}
NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name"
ascending:YES
selector:@selector(caseInsensitiveCompare:)];
return [allAccessories sortedArrayUsingDescriptors:@[nameDescriptor]];
}