gpt4 book ai didi

ios - 第一次发送后发送 'CBPeripheralManager' 的多个 NSData 实例失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:01 26 4
gpt4 key购买 nike

所以我设置了这段代码:

for (int index = 0; index < [dataArray count]; index++) {
dataToSend = [dataArray objectAtIndex:index];

BOOL sent = [self.manager updateValue:dataToSend
forCharacteristic:(CBMutableCharacteristic *)self.cashierCarachteristic
onSubscribedCentrals:nil];

if (!sent) {
NSLog(@"Failed to send :(");
}
}

然而,我的问题是,在发送数组中的第一个 NSData 之后,所有后续发送都失败了。我总是这样:

2014-10-24 17:01:45.162 Pengoo[1957:60b] 发送数据:94

2014-10-24 17:01:45.164 Pengoo[1957:60b] 发送数据:94

2014-10-24 17:01:45.166 Pengoo[1957:60b] 发送失败:(

2014-10-24 17:01:45.167 Pengoo[1957:60b] 发送数据:94

2014-10-24 17:01:45.168 Pengoo[1957:60b] 发送失败:(

2014-10-24 17:01:45.169 Pengoo[1957:60b] 发送数据:94

2014-10-24 17:01:45.170 Pengoo[1957:60b] 发送失败:(

谁能告诉我这是为什么?我是否可能将我的管理器设置错误,或者这是 CBPeripheralManager 的限制或...?

提前谢谢大家:)

最佳答案

引用CBPeripheralManager documentation -

DiscussionYou use this method to send updates of a characteristic’svalue—through a notification or indication—to selected centrals thathave subscribed to that characteristic’s value.

If the method returnsNO because the underlying transmit queue is full, the peripheralmanager calls the peripheralManagerIsReadyToUpdateSubscribers: methodof its delegate object when more space in the transmit queue becomesavailable. After this delegate method is called, you may resend theupdate.

本质上,蓝牙硬件以有限速率传输并具有有限输入缓冲区,与设备的执行速度相比,这两者都相对较小 - 因此您的应用程序可能会比硬件更快地生成更多数据过程。

updateValue 返回 NO 时,您需要将传输请求排队并重新开始传输,直到 peripheralManagerIsReadyToUpdateSubscribers: 委托(delegate)方法被调用。然后您可以恢复传输,直到它再次返回 false

关于ios - 第一次发送后发送 'CBPeripheralManager' 的多个 NSData 实例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com