我有一个覆盖屏幕的uiView,标签和uiindicator在我进行网络通话时运行。
现在问题就在于此。我在viewdidload
中初始化了这个[self.UiIndicator_view setHidden:YES];
[self.UiIndicator_label setHidden:YES];
[self.UiIndicator_indicator setHidden:YES];
在我打电话的网络电话上
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
{
[self ShowIndicator:@"Syncing Data"];
if([self CheckNetwork])
[HttpMethods GetHeaderDataForAppHttp];
dispatch_async(dispatch_get_main_queue(), ^
{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Network Error"
message:@"You have no network connection. Please connect to a network to sync data."
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
[self StopIndicator];
});
});
,方法如下
-(void)ShowIndicator:(NSString*)labelText
{
[self.UiIndicator_view setHidden:NO];
[self.UiIndicator_label setHidden:NO];
[self.UiIndicator_label setText:labelText];
[self.UiIndicator_indicator setHidden:NO];
[self.UiIndicator_indicator startAnimating];
}
-(void)StopIndicator
{
[self.UiIndicator_view setHidden:YES];
[self.UiIndicator_label setHidden:YES];
[self.UiIndicator_indicator setHidden:YES];
[self.UiIndicator_indicator stopAnimating];
}
现在问题。当我第一次启动应用程序时,代码运行完全正常。调用转到dispatch_asyn,我看到带有标签和指示符的UIView,并且在调用返回主线程后,uiview和指示符消失,如果没有提取数据,我将获得alertview。
如果在第一次尝试时无法获取数据,我已经为用户提供了手动调用相同功能的选项。这里出现了问题,我可以在NSLOG中看到该方法已被调用,http请求被触发,但我看不到带指示符的uiview,即使是uiview后面的元素和按钮也不可点击(这意味着在顶部有一个UIVIEW,但我看不到它。一段时间后,我得到了uialeart,这意味着通话已经完成。
设置uiview hidden = yes是否会使其无效或类似的东西?我无法解决这个简单的问题。
答案 0 :(得分:1)
您正在后台队列中调用[self ShowIndicator:@"Syncing Data"];
。
仅更新主队列上的UI。
更具体地说:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
{
[self ShowIndicator:@"Syncing Data"]; <<<< THIS IS YOUR PROBLEM