【问题标题】:iOS: How to execute a piece of code once activity indicator stops?iOS:一旦活动指示器停止,如何执行一段代码?
【发布时间】:2014-09-05 18:46:49
【问题描述】:

我需要一种方法来执行类似下面的功能,但不是等待 3 秒,而是等待活动指示器被隐藏 [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;。任何提示或建议表示赞赏。

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
 });

【问题讨论】:

  • 你有停止活动指示器的代码块的源代码吗?

标签: ios objective-c


【解决方案1】:

你用Key-Value Observing怎么样:

声明上下文

static int NetworkActivityContext;

添加你的观察者

[[UIApplication sharedApplication] addObserver:self forKeyPath:@"networkActivityIndicatorVisible" options:NSKeyValueObservingOptionNew context:&NetworkActivityContext];

实现 KVO 回调

- (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
        }
    }
}

【讨论】:

  • 我接受了这个答案,但我想知道这是否是确定何时执行任务的好方法。一旦该指标停止,我将一些委托设置为 nil,这样我的标头请求库就不会调用委托。 (如果委托被调用并且委托为 nil,则应用程序将崩溃)。
  • 我尝试在执行标头请求之前检查代表是否为零,但有时它会同时发生或在调用响应选择器时发生)。这是一个关于它的stackoverflow问题,但没有一个解决方案有效。 stackoverflow.com/questions/5701132/…
  • 我不熟悉 ASIHTTPRequest 是什么。KVO 绝对是在网络活动指示器隐藏状态更改时收到通知的绝佳解决方案,但是我无法与您谈论的其他委托代码交谈.我总是确保我正在检查 if(self.delegate && [self.delegate respondsToSelector:@"yourSelector"],并在完成后将委托设置为 nil。需要更多上下文,但听起来有点像你在处理不同的问题。
  • 另外考虑到allseeing-i.com/ASIHTTPRequest 说它在 2011 年停止更新,我想说是时候保释了。
  • 我会更改库,但我必须快速更新这个应用程序。这将是我的下一个优先事项。另外,网络活动指示灯可以通过自己App以外的东西打开吗?
【解决方案2】:

不要依赖活动指示器来确定应用程序的流程。在您设置[UIApplication sharedApplication].networkActivityIndicatorVisible = NO 的地方,您还应该发出通知或以其他方式向更广泛的受众表明活动已结束。然后收听该通知并在其他地方做您需要做的事情。

如果您在同一个类中设置networkActivityIndicatorVisible,或者如果您正在执行网络调用并且可以将您需要的内容放入完成块或委托回调中,您应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多