RedPark无法从串口读取数据:UIViewController与UINavigationController

时间:2013-02-09 00:08:19

标签: ios objective-c serial-port external-accessory

我正在使用Redpark Serial SDK 1.4 r270来帮助实现iphone的i / o功能。我目前遇到的一个问题是阅读使用

给出的数据
- (void) readBytesAvailable:(UInt32)numBytes {

这是我的错误。

Feb  8 15:27:50  iapd[897] <Warning>: ERROR - /SourceCache/iapd/iapd-1065.23/iapd/IAPSession.mm:-[IAPSessionBasic _sessionBufferToAppHasSpaceAvailable] - 823 session=0x1 for connectionID=0x1e12ea00 failed to write bytes, errno = 32
Feb  8 15:27:50  iOS[7428] <Warning>: ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-213/EASession.m:-[EASession dealloc] - 137 unable to close session for _accessory=0x20047eb0 and sessionID=65536
Feb  8 15:27:50  iOS[7428] <Warning>: ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-213/EAOutputStream.m:-[EAOutputStream write:maxLength:] - 212 failed to write 229 bytes (wrote -1) with error 9
Feb  8 15:27:50  iOS[7428] <Warning>: ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-213/EAInputStream.m:-[EAInputStream _readInputFromAccThread] - 357 error waiting for read data, errno = 9

使用单个视图应用程序,这种方法非常有效。

假设有一个带视图A的UINavigationController和视图B,其中A =&gt; B单击一个按钮时。视图B正在使用RscMgr线程,其中所有魔法都从串行端口读取。 在视图B的UINavigationController的第一个实例中,如果我们保持这个视图,它的工作完全正常。我们可以断开连接,连接端口,我们将继续流式传输数据。

然而,如果我回去查看A然后回到视图B.一切都会下地狱。我无法再从此函数读取数据,并在控制台中发现(MULTIPLE)错误。有没有人有充分理由说明为什么会发生这种情况以及我们如何解决这个问题?我知道我们已经将UIViewController从堆栈中弹出并且一切都重置了,并且再次创建了RscMgr线程但是没有被查看。我不确定如何使用SDK清除缓冲区,因为它没有提供。

2 个答案:

答案 0 :(得分:1)

这比上面的解决方案简单。在不同的.m文件中定义您的函数,并从AppDelegate启动,而不是ViewController。

我在编写的以前的应用程序中遇到过这个问题。另一种选择是在App Delegate中声明RscMgr,然后在给定的ViewController中初始化它。

答案 1 :(得分:0)

您宣布的范围

- (void) readBytesAvailable:(UInt32)numBytes {

可能是问题所在。当你打开和关闭B时,我会声明这个不会消失的地方。例如在UINavigationController或AppDelegate上。

更好的是,创建一个新的单例类来管理RedPark的界面,并根据需要从应用程序的其余部分进行查询。