2012-10-02 50 views
1

的主要运行循环中我使用的是串行电缆从RedPark买(IOS设备RS232)我的第一个项目。我已经通过发送和接收数据来实现它的功能(还没有太多) 我希望我的应用程序如何工作,是iPhone在通信中通过发送命令和外部设备回复所需的数据来充当主设备。如何回去目标C

而且很多次,我需要在同一时间问了几个数据包。

我遇到了一个问题,即由RedPark提供的readByteAvaible(),事件驱动,所以我无法在viewDidLoad或其他方法中一起发送几个命令。 我试过不同的方式来获得我需要的所有包。像多线程。它们都不起作用。从图书馆常见问题,它说:“你必须返回到你的运行循环之前,这些被处理”。

我还是相当新的客观C,感觉还是有点困惑。任何人都可以告诉我如何做到这一点?或者,也许有关目标C的主要运行循环的一些信息?

回答

1

运行循环是可可的版本event loop。所以这只是一堆事情要做。 Objective-C是动态的,因此列表往往是目标和选择器;这不像是像Win32或Mac Classic Toolbox这样的老式纯静态运行时间,您需要等待消息结构,然后根据消息类型输入一些精心设计的分支。

运行循环和线程具有一对一的关系,主运行循环是在主线程上运行的循环。总体而言,如果您不加任何额外的考虑,那么您的所有代码都将出现在主运行循环中,因为提供所有控件的UIKit仅在主运行循环中起作用。

所以,假设你有一个UIButton,并用电线连接起来调用didPressButton:则:

- (IBAction)didPressButton:(id)sender 
{ 
    // this code is running on the main run loop 

    NSLog(@"I'm executing on the main run loop"); 

    // when this method ends, control will return to the run loop 
} 

你可能不想多线程,你可能只是想安排一次运行循环。

您可以使用performSelectorOnMainThread:方法从任何位置安排主运行循环中的某些内容。如果您已经在主线程中,则只需使用performSelector:withObject:afterDelay:就可以在主运行循环中安排某些事情,但只有在已计划的其他事项之后才能执行。你可以通过延迟0.0来让它在接下来发生,但也给已经计划下一次发生的其他事情提供机会来运行。

RedPark的SDK只有在您移交您的电子邮件地址后才可用,所以我拒绝了;你能否给我们提供更多关于它如何制定的信息?是块还是回调或委托或其他?

+0

谢谢@Tommy。我正在使用导航控制器。第一个视图是具有两个按钮的委托人通向其他两个视图,并用于发送接收数据。在另外两个视图中,我设置协议来调用第一个想要的包。另外,在启动时,在第一个视图中,我想要求显示来自外部设备的三个序列号和信息。 – user1491987

+0

如果你需要RedPark的SDK,我可以发送给你,只是我不知道我是否可以通过堆栈溢出发送。 – user1491987

+0

我给了他们我的电子邮件,我认为这是我可能会购买的东西。这听起来像你本来应该在runloop畅通的主线程上;您需要将自己设置为RscMgr的委托,并使用其中的回调推送更多数据。那是你想要做什么? – Tommy