iOS:在app从后台返回后访问EAOutputStream时的SIGPIPE

时间:2014-05-13 22:21:40

标签: ios bluetooth external-accessory nsoutputstream

我有一个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}}属性。在这种情况下,传感器设备的链接指示灯仍然亮着,并且访问设置>蓝牙屏幕将设备显示为“已连接”。强制退出应用程序并重新启动是恢复通信的唯一方法。

有谁知道我应该如何正确处理这个问题?我需要在应用程序进入后台之前向流发送“关闭”命令,并在它返回时再次“打开”它们吗?

1 个答案:

答案 0 :(得分:0)

我通过关闭流来解决这个问题,作为后台处理过程的一部分。似乎在应用程序的背景中保留EASession是一个坏主意。即使我没有获得SIGPIPE,它也被替换为EXEC_BAD_ACCESS。