2

我正在编写一个接收 OSC 消息的应用程序。这是一个截图

当我将突出显示的代码放入 receivedOSCMessage 方法(每次收到消息时调用)时,文本字段不会显示 my_textfield.text 的更新值,即使它确实在控制台中打印了正确的值。但是,如果我把它放在 ViewDidLoad 中,它就可以正常工作。可能是什么原因造成的?

编辑: receivedOSCMessage 是一个委托方法。

以下是 OSCMViewController.h 的内容:

#import <UIKit/UIKit.h>

@interface OSCMViewController : UIViewController
@property (retain, nonatomic) IBOutlet UITextField *my_textfield;

@end

Edit2:在 nib 中创建的文本字段。

消息通过单独的应用程序手动发送。

4

1 回答 1

1

看起来该方法正在触发,并且消息的内容具有一个已成功表示为字符串的浮点数。您还指出,在设置文本字段的值时,您可以看到文本字段的内容viewDidLoad

这是在视图准备好之前触发 receivedMessage 方法的有力证据。viewDidLoad要确认,请在和 中添加断点receivedMessage。我的猜测是你会receivedMessage首先看到断点。

另一种可能性是消息接收组件正在从主线程发送委托消息,并且您的 UI 更新会因此而丢失。尝试在 receivedOSCMessage 方法中将您的代码包装在这样的主线程块中......

    dispatch_async( dispatch_get_main_queue(), ^{
       // do the ui work here
       my_textfield.text = dat_string;
    });
于 2013-04-17T17:36:54.960 回答