【问题标题】:iOS6: CBPeripheral is being dealloc'ed while connectingiOS6:CBPeripheral 在连接时被释放
【发布时间】:2013-03-28 14:53:09
【问题描述】:

我正在尝试连接蓝牙 BTLE 设备。我发现外围设备没有问题。

但是,当我尝试连接外围设备时,我收到了以下警告。

2013-04-05 22:10:36.110 CoreBluetooth[WARNING] 7DA9E322-D710-081B-4A9D-526DE546B13C,Name = “Find My Car Smarter”,IsConnected = NO> 在连接时被解除分配

此外,没有调用相关的委托方法:

didConnectPeripheral:
didFailToConnectPeripheral:

我已经为此苦苦挣扎了好几个小时... 请帮忙。

【问题讨论】:

    标签: objective-c ios6 core-bluetooth cbperipheral


    【解决方案1】:

    简短回答:您需要保留外围设备。

    长解释:酷睿蓝牙被发现时并不知道你是否对这个外设感兴趣。连接它是不够的,你需要保留它。

    将属性添加到您正在执行所有这些操作的类中:

    @property (strong) CBPeripheral     *connectingPeripheral;
    

    然后在发现设备时将外围设备分配给此属性,然后再从didDiscoverPeripheral返回:

    - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
    {
      DDLogVerbose(@"Discovered peripheral: %@ advertisement %@ RSSI: %@", [peripheral description], [advertisementData description], [RSSI description]);
    
      [central connectPeripheral:peripheral options:nil];
      self.connectingPeripheral = peripheral;
    }
    

    【讨论】:

    • 成功了!这让我发疯了......非常感谢!
    • 请批准答案(旁边的绿色勾号)。它可以帮助人们知道这个答案有效,并且我可以获得更多积分和徽章;)
    • 我遇到了同样的问题。我将引用保存在一个数组中,但是当我尝试连接时,我得到了同样的错误。 @property NSMutableArray *heartRateMonitors; [self setHeartRateMonitors:[[NSMutableArray alloc] init]]; [[self heartRateMonitors] addObject:peripheral];如果我将它存储在像您的示例这样的单个变量中,问题就会消失。知道我做错了什么吗?
    • 数组应该保留它包含的对象,但也许你释放数组太早了?您应该在对象的 dealloc 方法中添加调试消息,以确保对象本身没有被释放(这将释放 heartRateMonitors 属性)。
    • 感谢您的回答。我已经坚持了一段时间了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多