我在我的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()
方法。我不想每次请求都写它们。我想,每次请求都会自动调用它们。
我还尝试使用纯NSURLSession
和NSURLSessionTask
并扩展它们:
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?
答案 0 :(得分:1)
如果您不想为每个请求手动调用您的功能并且您想要使用Alamofire,我建议您对其进行改进以添加网络活动指示器功能。
您需要在ActivityManager中注册2个通知观察者,然后在Alamofire.Manager或Alamofire.Request中的相关位置触发通知。
另请查看在{AFNetworking中实现所需功能的source of AFNetworkActivityIndicatorManager。