1

在开发 iPhone 应用程序之前,我认为每当 iPhone 进行网络访问时,它都会启动 Activity Indicator。现在我正在学习制作应用程序,我明白事实并非如此。网络活动指示器只有在我们决定让它出现时才会出现,即使根本没有网络。

如果我错了就阻止我。

如果我不是,有没有办法确保我的应用程序正在使用网络?

我正在做一个基于 Evernote SDK 的应用程序,当我启动 Evernote 创建时,我没有使用任何 NSURLConnection 或类似的东西,我无法确定它是在下载还是上传东西。我应该什么时候启动活动指示器?我应该什么时候停止它?

有规则吗?有标准方法可以知道吗?

谢谢

4

2 回答 2

4

与其尝试“确保您的应用程序是否使用网络”,不如将显示指示器的行为与操作联系起来。即,当你开始一个网络操作时,你显示它,当调用网络操作的完成或错误回调时,你隐藏它。当然,如果您正在执行多个并行操作,那么您需要计算活动操作的数量。像这样的东西:

int nNetworkOps = 0;

- (void)startNetworkingOperation
{
    nNetworkOps++;
    [[UIApplication sharedApplication] setNetworkActivityIndicatorEnabled:YES];

    [NSURLConnection sendAsynchronousRequest:rq queue:q completionHandler:^(NSURLResponse *resp, NSData *d, NSError *e) {
        [self anOpHasFinished];
    }];
}

- (void)anOpHasFinished
{
    if (--nNetworkOps == 0) {
        // hide the activity indicator
        // You have to do this on the main thread
        // (left to you as an exercise)
    }
}
于 2013-01-26T16:39:31.840 回答
1

活动指标的使用没有严格的规定。您应该使用指示器来告诉用户实际上在后台发生了一些事情。

例如,如果您正在创建需要使用某些 Web 服务进行搜索的应用程序,用户输入关键字并按下按钮,您联系服务器,服务器返回结果并显示带有搜索结果的新视图。请注意点击搜索按钮的那一刻,如果您没有显示活动指示器,用户可能会认为搜索没有执行,他会尝试多按几次,直到他变得紧张并关闭我们的应用程序。如果我们显示活动指示器,用户将知道搜索正在后台执行,他会耐心等待结果。

在某些情况下,您有网络通信,但没有显示活动指示器。例如,在每次位置更新时将 gps 位置发送到服务器的应用程序。在这里,您不希望用户知道网络通信何时发生,因为它是不必要的,并且在此期间可能会变得令人沮丧。

于 2013-01-26T16:44:25.580 回答