我正在编写一个在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;
答案 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
。