关于iOS开发中遇到的“libsystem_kernel.dylib`semaphore_wait_trap:”错误的相关技术文章
错误介绍:我是在项目中使用到了socket相关通信技术,当正常使用打开都没有问题,只有当按电源键锁屏后,点击推送消息的时候,进入app时,白屏然后闪退,Xcode跟踪错误日志,显示的错误信息如下:
在日志输出端口,输入bt,回车,如下:
显示错误原因是:signal SIGPIPE
解释如下:
socket管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读取管道没有打开或者意外终止就往管道里面写,写进程就会收到SIGPIPE信号。此外用socket通信的两个进程,写进程在写socket的时候,读进程已经终止。
我们需要在send的时候检测到服务器已经关闭连接,进行重新连接。正常情况下send函数返回-1表示发送失败,但是在IOS上SIGPIPE在send返回之前就终止了进程,所以我们需要忽略SIGPIPE,让send正常返回-1,然后重新连接服务器。
解决BUG代码如下:
在main.m文件中,写上:
就OK了。