我有一个iPhone应用程序(iOS 7.0),它通过ExternalAccessory库与蓝牙2.1传感器设备进行交互。如果应用程序通过任何常用方法(锁定,主页按钮,自动睡眠等)进行后台处理,则当它尝试恢复写入NSOutputStream
EASession
上的EAOutputStream
时,会获得一个SIGPIPE app用于与设备通信。我还收到来自NO
的内部错误,表示发生了写入错误。
从那时起,我永远无法写入输出流,输出流总是返回hasSpaceAvailable
EAAccessory
状态为5(达到流的结束)。
可能感兴趣的是:EASession
指向connected: NO
的{{1}},[[EAAcessoryManager sharedAccessoryManager] connectedAccessories]
显示的connected: YES
显示connectionId
。它们具有相同的{{1}}属性。在这种情况下,传感器设备的链接指示灯仍然亮着,并且访问设置>蓝牙屏幕将设备显示为“已连接”。强制退出应用程序并重新启动是恢复通信的唯一方法。
有谁知道我应该如何正确处理这个问题?我需要在应用程序进入后台之前向流发送“关闭”命令,并在它返回时再次“打开”它们吗?
答案 0 :(得分:0)
我通过关闭流来解决这个问题,作为后台处理过程的一部分。似乎在应用程序的背景中保留EASession是一个坏主意。即使我没有获得SIGPIPE,它也被替换为EXEC_BAD_ACCESS。