我成功地发现了一个 Peripheral 并检索了它的本地名称:
[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]
但是,如果外围设备停止并使用不同的本地名称重新启动广告,则客户端无法识别更改。我猜
- (void)peripheralDidUpdateName:(CBPeripheral *)peripheral
仅当两个设备配对时才有效。有没有办法在不配对的情况下获得更新?
我成功地发现了一个 Peripheral 并检索了它的本地名称:
[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]
但是,如果外围设备停止并使用不同的本地名称重新启动广告,则客户端无法识别更改。我猜
- (void)peripheralDidUpdateName:(CBPeripheral *)peripheral
仅当两个设备配对时才有效。有没有办法在不配对的情况下获得更新?
苹果的错误。仍然存在于 iOS 6.1 中。以下是如何重置 CB 缓存的技巧:
对不起。
您可以在 name 属性上使用 KVO,即使在未连接时也可以使用,至少在 OS X 10.10 中是这种情况。我只是使用它自己调用 -peripheralDidUpdateName: 方法,并通过跟踪名称字符串来消除重复调用。
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];
}
}