美文网首页
iOS小记--didConnectPeripheral不调用

iOS小记--didConnectPeripheral不调用

作者: 原鸣清 | 来源:发表于2016-06-02 23:37 被阅读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.

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

    相关文章

      网友评论

          本文标题:iOS小记--didConnectPeripheral不调用

          本文链接:https://www.haomeiwen.com/subject/xpmkdttx.html