2015-09-17 20 views
7

Tôi có một lớp 2.0 ApiManager Swift sử dụng Alamofire 2.0 với init sau:Manager với Swift 2.0 Alamofire bị hủy

var manager:Manager 

init() { 
    var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:] 
    defaultHeaders["Authorization"] = "Bearer \(UserAccount.sharedInstance.token)" 

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    configuration.HTTPAdditionalHeaders = defaultHeaders 

    manager = Alamofire.Manager(configuration: configuration) 
} 

Ví dụ chức năng:

func getMe(completion:(jsonObject: NSDictionary) ->()) { 
    manager.request(.GET, Constants.apiURL + "me").responseJSON { request, response, result in 

     print(self.manager) //THIS LINE FIXES IT 

     switch result { 
     case .Success(let json): 
      completion(jsonObject: json as! NSDictionary) 
     case .Failure(let data, let error): 
      print("Error: \(__FUNCTION__)\n", data, error) 
     } 
    } 
} 

Các lỗi tôi nhận được:

Error Domain=NSURLErrorDomain Code=-999 "cancelled" 

Dường như yêu cầu bị hủy vì người quản lý đang được deallocated. Việc thêm lệnh in ngăn cản người quản lý khỏi bị deallocated và nó hoạt động hoàn hảo sau đó. Nhưng tôi đang cố gắng tìm một giải pháp tốt hơn.

Bất kỳ trợ giúp sẽ được đánh giá cao!

Trả lời

13

Tôi đã chạy đến vấn đề này cùng, tôi đã sử dụng này để sửa chữa nó

class Session { 
    static let sharedInstance = Session() 

    private var manager : Manager? 

     func ApiManager()->Manager{ 
      if let m = self.manager{ 
       return m 
      }else{ 
       let defaultHeaders = ["X-Version":"Some header"] 

       let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
       configuration.HTTPAdditionalHeaders = defaultHeaders 

       let tempmanager = Alamofire.Manager(configuration: configuration) 
       self.manager = tempmanager 
       return self.manager! 
      } 
     } 
    } 

sau đó tôi gọi nó với

Session.sharedInstance.ApiManager().request(... 
+1

Cảm ơn ! Điều đó đã giải quyết được vấn đề của tôi. Tôi vừa thêm dòng 'static let sharedInstance = ApiManager()' vào lớp của tôi rồi gọi nó giống như bạn đã nói. Rất biết ơn sự giúp đỡ của bạn! – Groarus

+0

@Groarus, bạn đã sử dụng 'static let sharedInstance = ApiManager()' hoặc 'static let sharedInstance = ApiManager' ?. Việc đầu tiên ném một lỗi. –

Các vấn đề liên quan