gpt4 book ai didi

nsurlsession - 如何在状态栏中指示网络事件

转载 作者:行者123 更新时间:2023-12-01 05:09:29 24 4
gpt4 key购买 nike

我在我的 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?

最佳答案

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

看看 source of Alamofire

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

也看看 source of AFNetworkActivityIndicatorManager在 AFNetworking 中实现您想要的功能。

关于nsurlsession - 如何在状态栏中指示网络事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com