Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS4网络活动指示器通过UI被阻止_Iphone_Objective C_Sdk_Ios4 - Fatal编程技术网

Iphone iOS4网络活动指示器通过UI被阻止

Iphone iOS4网络活动指示器通过UI被阻止,iphone,objective-c,sdk,ios4,Iphone,Objective C,Sdk,Ios4,我正在请求下载一些图像,然后我想用它们替换子视图。 这意味着UI被阻止,然后新视图将在稍后显示 我想让用户明白,阻塞是由于下载造成的 首先,我尝试使用 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; [self downloadFunction]; [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 这会导

我正在请求下载一些图像,然后我想用它们替换子视图。 这意味着UI被阻止,然后新视图将在稍后显示

我想让用户明白,阻塞是由于下载造成的

首先,我尝试使用

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[self downloadFunction];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
这会导致活动指示器最大程度地闪烁(几乎没有),因为我的请求阻塞了UI线程

我无法将downloadFunction置于后台,因为我在按下控制器之前依赖于可用的下载数据(这会导致错误“不支持多次按下同一视图控制器实例”,因为我可以多次单击该按钮)

然后我尝试在视图顶部放置一个带有旋转轮子的子视图:

[self performSelectorInBackground:@selector(showActivitySubView) withObject:nil];
or  
[NSThread detachNewThreadSelector: @selector(showActivitySubView) toTarget:self withObject:nil];
但用户界面仍然被阻止,我的指示器在下载完成后才显示


有什么想法吗?

您可以简单地将您的方法一分为二,并使用一个定时调用来允许UI刷新线程在阻塞主线程之前启动。例如:

- (void) doActualWork {
  [self downloadFunction];
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void) doWork {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  [self performSelector:@selector(doActualWork) withObject:Nil afterDelay:0.05];
}

也许有更好的方法可以做到这一点,我不确定任务栏上的小指示灯是否足以让应用程序审查人员感到高兴,但这应该是可行的,不需要线程处理。

谢谢!这对我有用。。。为了指示网络活动,我在视图中添加了另一个带有UIActivityIndicatorView的子视图,该视图也将在doActualWork开始之前运行,下载将阻止UI,因此我不必担心任何人按下按钮两次:-)