2014-09-25 6 views
4

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가 있든 없든?

답변

1

모든 요청에 ​​대해 수동으로 기능을 호출하고 싶지 않고 Alamofire를 사용하려는 경우 네트워크 활동 표시기 기능을 추가하는 것이 좋습니다.

당신은 당신의 ActivityManager 2 알림 관찰자를 등록하고 Alamofire.Manager 또는 Alamofire.Request에서 중 관련 장소에서 알림을 실행하는 데 필요한 source of Alamofire

에서보세요.

또한 AFNetworking에서 원하는 기능을 구현하는 source of AFNetworkActivityIndicatorManager을 살펴보십시오.