iOS小记--didConnectPeripheral不调用

2016-06-02  本文已影响1338人  原鸣清

实现通用的中心角色的时候,会在回调方法中获取被发现的周边设备,紧接着,可能就会像文档说的那样,去连接设备。并且实现了didConnectPeripheral方法,期待输出已连接的状态。

-(void)centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
[myCentralManager connectPeripheral:peripheral options:nil];
}

但是这里恐怕要失望了,因为一些需求,自己又几乎从头写了中心角色的实现,但是在这一步被坑到了,诚如标题,didConnectPeripheral方法不被调用。天哪,这是超出认知范围的(至少当时是这样认为的,这根本不可能嘛,项目里都使用了这么久了,怎么会连不上)。
然后去stack overflow搜了搜,真像出乎我的意料,CBPeripheral对象居然会被释放掉,在这里对它用的是个weak?虽然我不太相信,但还是赶紧试了试答案了说的方法,写了个全局的属性对CBPeripheral强引用。果然,接下来一切OK,后面的内容写起来畅通无阻。
心里还是有点疑惑,就去找文档,然后找到这样一句话:

You must retain a local copy of the peripheral if any command is to be performed on it.

没有看到其它的解释,结合上面的那个案例,结论很明显了。至于为什么,我还是不清楚,如果谁理解透彻了,欢迎分享。

上一篇下一篇

猜你喜欢

热点阅读