iOS:一旦活动指示器停止,如何执行一段代码?
我需要一种方法来执行类似于下面的功能,但它不是等待3秒钟,而是等待活动指示器被隐藏代码>。任何提示或建议都将不胜感激iOS:一旦活动指示器停止,如何执行一段代码?,ios,objective-c,Ios,Objective C,我需要一种方法来执行类似于下面的功能,但它不是等待3秒钟,而是等待活动指示器被隐藏。任何提示或建议都将不胜感激 double delayInSeconds = 3.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
double delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// lines of code
});
你如何使用:
声明上下文
添加您的观察者
实现KVO回调
不要依赖活动指示器来确定应用程序的流量。在设置
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO
的位置,还应发出通知,或向更广泛的受众指示活动已结束。然后倾听通知并在其他地方做你需要做的事情
如果您在同一类中设置
networkActivityIndicatorVisible
,或者如果您正在执行网络调用,并且可以将所需内容放入完成块或委托回调中,则应改为这样做。您是否有该块的源代码我接受了这个答案,但我想知道这是否是确定何时执行任务的好方法。一旦该指示器停止,我将一些委托设置为nil,这样就不会有委托被我的头请求库调用的机会。(如果调用了委托,且委托为零,则应用程序将崩溃)。在执行标头请求之前,我尝试检查委托是否为零,但有时会在调用Selector的同时或响应时发生)。这里有一个关于它的stackoverflow问题,但没有一个解决方案有效。我不熟悉任何ASITPPREQUEST。。当网络活动指示器隐藏状态发生变化时,KVO无疑是一个很好的通知解决方案,但是我无法与您所谈论的其他代理代码交谈。我总是确保检查(self.delegate&&[self.delegate respondsToSelector:@“yourSelector”],并在完成时将代理设置为零。需要更多的上下文,但听起来像是你在处理一个不同的问题。同时考虑到说它在2011年停止更新,我想说是时候退出了。我将更改库,但我必须快速更新此应用程序。这将是我的下一个优先事项。此外,网络活动是否可以还是被你自己的应用程序以外的东西打开?
static int NetworkActivityContext;
[[UIApplication sharedApplication] addObserver:self forKeyPath:@"networkActivityIndicatorVisible" options:NSKeyValueObservingOptionNew context:&NetworkActivityContext];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (context == &NetworkActivityContext) {
BOOL isNetworkActivityVisible = [UIApplication sharedApplication].networkActivityIndicatorVisible;
if(!isNetworkActivityVisible){
//Do whatever work you need to do now that it's hidden
}
}
}