CoreBluetooth:刷新已经发现的外设的本地名称

我成功地发现了一个外围设备,并检索其本地名称:

[advertisementData objectForKey:CBAdvertisementDataLocalNameKey] 

但是,如果外围设备停止并以不同的本地名称重新开始广告,则客户端不会识别该更改。 我猜

 - (void)peripheralDidUpdateName:(CBPeripheral *)peripheral 

只有在两个设备配对的情况下才有效。 有没有办法在没有配对的情况下获得更新?

苹果的错误。 依然存在于iOS 6.1中。 以下是如何重置CBcaching的技巧:

  1. 备份设备到iCloud。
  2. 重置networking设置。
  3. 删除你的应用程序,并通过Xode安装回去
  4. 此时,您的外围设备将以新名称显示。
  5. 手动恢复您的networking设置或从iCloud恢复。

抱歉。

你可以在name属性上使用KVO,即使在没有连接的情况下也可以工作,至less在OS X 10.10中是这样的。 我只是用它自己调用-peripheralDidUpdateName:方法,并通过跟踪名称string来解密调用。

 self.name = self.peripheral.name; [self.peripheral addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL]; - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if([keyPath isEqualToString:@"name"]) { [self peripheralDidUpdateName:self.peripheral]; return; } [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } - (void)peripheralDidUpdateName:(CBPeripheral *)peripheral { if([peripheral.name isEqualToString:self.name]) return; if([self.delegate respondsToSelector:@selector(peripheralDidUpdateName:)]) { [self.delegate peripheralDidUpdateName:self]; } }