【问题标题】:How to indicate network activity in status bar如何在状态栏中指示网络活动
【发布时间】:2014-11-20 20:41:38
【问题描述】:

我在我的 iOS 应用程序中使用 Alamofire 进行网络连接。我需要在 iOS 7+ 中运行这个应用程序。我想在状态栏中显示网络活动,所以我创建了这个结构:

struct ActivityManager {

    static var activitiesCount = 0

    static func addActivity() {
        if activitiesCount == 0 {
            UIApplication.sharedApplication().networkActivityIndicatorVisible = true
        }

        activitiesCount++
    }

    static func removeActivity() {
        if activitiesCount > 0 {
            activitiesCount--

            if activitiesCount == 0 {
                UIApplication.sharedApplication().networkActivityIndicatorVisible = false
            }
        }
    }

}

但我不知道在哪里调用代码addActivity()removeActivity() 方法。我不想在每个请求中都写它们。我想,每个请求都会自动调用它们。

我也尝试使用纯 NSURLSessionNSURLSessionTask 并扩展它们:

extension NSURLSessionTask {

    func resumeWithActivity() {
        ActivityManager.addAction()
        self.resume()
    }

}


public extension NSURLSession {

    func OwnDataTaskWithRequest(request: NSURLRequest!, ownCompletionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?) -> NSURLSessionDataTask! {

        return self.dataTaskWithRequest(request, completionHandler: { (data, response, error) in
            ActivityManager.removeAction()
            ownCompletionHandler!(data, response, error)
        })
     }

}

然后我像这样使用它们:

var session: NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)

session.OwnDataTaskWithRequest(request) { (data, response, error) -> Void in
    // some logic here            
}.resumeWithActivity()

但是这种方法行不通。在 iOS 7 中,NSURLSession 扩展不可见。我为此创建了一个bug report(使用sample project)。

您能否给我一些建议,如何实现我的目标?有没有 Alamofire?

【问题讨论】:

    标签: nsurlsession nsurlsessiontask alamofire


    【解决方案1】:

    如果你不想为每个请求手动调用你的函数并且你想使用 Alamofire,我建议你改进它以添加网络活动指示器功能。

    看看source of Alamofire

    您需要在 ActivityManager 中注册 2 个通知观察者,然后在 Alamofire.Manager 或 Alamofire.Request 中的相关位置触发通知。

    还可以查看source of AFNetworkActivityIndicatorManager,它在 AFNetworking 中实现了您想要的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多