10

我成功地发现了一个 Peripheral 并检索了它的本地名称:

[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]

但是,如果外围设备停止并使用不同的本地名称重新启动广告,则客户端无法识别更改。我猜

- (void)peripheralDidUpdateName:(CBPeripheral *)peripheral

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

4

2 回答 2

5

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

  1. 备份设备到 iCloud。
  2. 重置网络设置。
  3. 删除您的应用并通过 Xode 重新安装
  4. 此时,您的外围设备将以新名称出现。
  5. 手动恢复您的网络设置或从 iCloud 恢复。

对不起。

于 2013-02-04T05:03:24.240 回答
0

您可以在 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];
    }
}
于 2014-11-04T00:22:17.717 回答