第一篇文章 - 请温柔。
我正在尝试将远程控制应用程序从 Android 移植到 iPhone,并且在主视图中的方法上使用 dispatch_async 进行线程内通信时遇到了一些困难。
该应用程序有一个单独的 ControlPanel 类,它负责与远程客户端的通信。ControlPanel 通信对象被实例化为一个后台线程,它负责对设备的连续网络通信,我需要后台线程将简单的文本字符串传递给 UI 线程 - 更新一个文本字段。
我看过很多例子,但似乎都没有处理定义,我一直在绕圈子。如何在 ControlPanel 类中定义方法?我尝试了各种定义方法,但没有取得任何进展。我错过了一些简单的东西吗?建议使用 viewDidLoad 中的 updateKeypadDisplay 作为执行此操作的方法,但我对语法的理解不足以了解我哪里出错了。
/*
* In the ControlPanel.m class the thread does stuff and wants to update the UI:
*/
NSString * kpString = @"String Updated By Process";
dispatch_async(dispatch_get_main_queue(), ^{
self.updateKeypadDisplay(kpString); // << This call gives an error - property not found on object of type ControlPanel
});
/*
* In the ControlPanel.h header :
*/
- (void)updateKeypadDisplay:(void (^)(NSString *kpString))block;
/*
* In the ViewController .m
*/
- (void)viewDidLoad
{
[super viewDidLoad];
kpdisplay.text = @"Initial String";
backgroundQueue = dispatch_queue_create("com.sss.tt.bgqueue", NULL);
dispatch_async(backgroundQueue, ^{
self.panelobj = [[ControlPanel alloc ]init];
[self.panelobj connectPanel];
});
// This was suggested as the way to define the method to update the main UI kpdisplay text field, but
// I cannot get the syntax right. I'm also unsure the definitions are correct in the headers.
//
// [ControlPanel updateKeypadDisplay::^(NSData *kpString) {
// self.kpdisplay.text = kpString;
// }
}