更新视图iOS

时间:2014-02-06 09:32:30

标签: ios uiview refresh nsoperation

我正在编写一个在NSOperation中收听套接字的iOS应用。当在套接字上读取了某些内容时,我通过调用UIViewController的方法来更改视图的内容(只更改某个标签的隐藏参数)。问题是视图不会立即刷新。为什么这样,我该如何解决问题?

在我的UIViewController的viewDidLoad中:

_broadcastQueue = [[NSOperationQueue alloc] init];
_broadcastQueue.name = @"broadcastPairing";
PairingDevice *broadcast = [[PairingDevice alloc] initWithCode:_code andDelegate:self];
[_broadcastQueue addOperation:broadcast];

当听众收到数据时,我打电话给:

[self.delegate setClientConnectedWithSocket:sockTCP andIP:[NSString stringWithUTF8String:inet_ntoa(sin.sin_addr)] andHostname:[NSString stringWithUTF8String:data.machineName]];

在我的UIViewController的方法中(现在):

    _codeLabel.hidden = YES;
    _infoText.hidden = YES;

    _hostLabel.hidden = NO;
    _ipLabel.hidden = NO;
    _ipLabel.text = ip;
    _hostLabel.text = hostname;

2 个答案:

答案 0 :(得分:1)

确保您在应用程序的主线程上执行该代码 这只是一个假设,但我猜你的网络调用是在后台线程中执行的(因为它是预期的),所以你需要在主线程中做所有的UI内容:

dispatch_async(dispatch_get_main_queue(), ^{
// Your UI code
});

答案 1 :(得分:0)

也许你的插座听不到主线程。
尝试使用operatio主队列来扭曲委托调用,如下所示:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
   [self.delegate setClientConnectedWithSocket:sockTCP andIP:[NSString stringWithUTF8String:inet_ntoa(sin.sin_addr)] andHostname:[NSString stringWithUTF8String:data.machineName]];
}];

另外,在检查代表之前是否回复@selectore