CBPeripheralManager AddService 上的 iOS 崩溃断言失败:

Posted

技术标签:

【中文标题】CBPeripheralManager AddService 上的 iOS 崩溃断言失败:【英文标题】:iOS crash Assertion Failure on CBPeripheralManager AddService: 【发布时间】:2017-07-17 04:37:38 【问题描述】:

我在 ios CoreBluetooth 上遇到崩溃问题 [CBPeripheralManager AddService:]

似乎是由于addService 方法中的断言失败而发生的。尝试了很多方法,仍然无法解决问题。

据我了解,这不是空指针异常,因为我已经测试过将 nil 值作为 AddService 参数传递,这会产生不同的问题。

我已经实现了 CBPeripheralManager 的所有代表,包括 CBCentral 代表。

一般来说它工作正常。通常我不能故意重现这个问题。但它突然发生。

请帮忙 . 崩溃日志:

0   CoreFoundation                 0x18b3cafe0 __exceptionPreprocess + 124
1   libobjc.A.dylib                0x189e2c538 objc_exception_throw + 56
2   CoreFoundation                 0x18b3caeb4 +[NSException raise:format:arguments:] + 104
3   Foundation                     0x18be62720 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 112
4   CoreBluetooth                  0x1922ab420 -[CBPeripheralManager addService:] + 820
5   MyApp                        0x10110e1f4 -[MyPeripheralManager addServiceIntoPeripheralManager] (MyPeripheralManager.m:202)

代码片段:

-(void)addService
if (!isServiceAdded) 
    CLLog("Add Service timer started");
    [backgroundTaskManager manageBackgroundRunningTask];
    /*
     AddService will be called after 5 seconds
     when application launching finished or iOS BT on
     */
    [self performSelector:@selector(addServiceIntoPeripheralManager) withObject:self afterDelay:SERVICE_ADDING_DELAY]; // 5 secs

 else 
    CLDbg("Service already added");


- (void)addServiceIntoPeripheralManager
CLLog("Add Service timer expired");
CLDbg("Service Adding: %@", [UUIDString]);
[cbPeripheralManager addService:Service];

提前致谢。

【问题讨论】:

分享一些你尝试过的代码 请分享您的代码 添加了sn-p代码,请分享一下这种断言失败的原因。 断言失败的文本是什么?这将描述出了什么问题。使用计时器来延迟操作是一种代码味道。你为什么这样做? 会有一个文本描述被传递给断言失败;您需要在控制台日志中找到它,或者您只是在猜测。您应该只添加服务以响应开机状态(或开机状态加上后续用户操作)。您的应用不能多次尝试添加服务 【参考方案1】:

您没有实现 BluetoothManager 的回调更新

见this answer

和This answer

希望对你有帮助

【讨论】:

我已经实现了 CBPeripheralManager 的所有代表,包括 CBCentral 代表。一般来说,它工作正常。通常我不能故意重现这个问题。但它突然发生。

以上是关于CBPeripheralManager AddService 上的 iOS 崩溃断言失败:的主要内容,如果未能解决你的问题,请参考以下文章

获取 CBPeripheralManager 订阅的 Centrals

为啥我的 CBPeripheralManager 有广告但无法被发现?

CBPeripheralManager 延迟停止广告/位置管理器范围停止 iBeacon

CBPeripheralManager AddService 上的 iOS 崩溃断言失败:

CBPeripheralManager startAdvertising 在 OS X yosemite 上不起作用

页面常用脚本