2016-04-28 28 views
0

我最近一直在將代碼重構爲基礎cocoapod以用於多個項目。一個這樣的類是Alamofire的一個非常刻板的路由枚舉。它一直工作得很好,直到被移動到椰子樹......現在正在崩潰。示例實現:Swift Routing當移動到cocoapod時,枚舉崩潰

public enum Router: URLRequestConvertible { 

    static var baseURLString = "http://myserver.com/api" 

    case Endpoint1(String, String) 
    case Endpoint2(String, String, Date, Date) 
    case Endpoint3(String, String) 

    public var URLRequest: NSMutableURLRequest { 
     var path : String! { 
      switch self { 
      case .Endpoint1(let id, _): 
       return "/endpoint1/" + id 
      case .Endpoint2(let id, _, _, _): 
       return "/booking/\(id)/thing" 
      case .Endpoint3(_, _): 
       return "/authenticate" 
      } 
     } 

     var parameters: [String: AnyObject] { 
      switch self { 
      case .Endpoint2(_, _, let startDate, let endDate): 
       let params = ["startDate": startDate, "endDate" : endDate] 
       return params 
      default: 
       let params = [String: AnyObject]() 
       return params 
      } 
     } 

     var method : Alamofire.Method { 
      switch self { 
      case .Endpoint2: 
       return .POST 
      default: 
       return .GET 
      } 
     } 

     var body : [String : AnyObject]?{ 
      switch self{ 
      case .Endpoint3(let email, let password): 
       return ["email" : "\(email)", "password" : "\(password)"] 
      default: 
       return nil 
      } 
     } 

     var header : [String: String]?{ 
      switch self { 
      case .Endpoint1(_, let token): 
       return ["x-access-token" : token] 
      default: 
       return nil 
      } 
     } 

     let URL = NSURL(string: Router.baseURLString)?.URLByAppendingPathComponent(path) 
     let request = NSURLRequest(URL: URL!) 

     let encoding = Alamofire.ParameterEncoding.URL 

     let mutable = (encoding.encode(request, parameters: parameters).0) 
     mutable.HTTPMethod = method.rawValue 

     if let bodyParams = body{ 
      mutable.setValue("application/json", forHTTPHeaderField: "Content-Type") 
      mutable.addJsonArrayToRequestBody(bodyParams) 
     } 

     if let headerParams = header{ 
      for param in headerParams{ 
       mutable.setValue(param.1, forHTTPHeaderField: param.0) 
      } 
     } 

     return mutable 
    } 
} 

失敗行是:

for param in headerParams{ 

但因爲它是在一個發展cocoapod,我不能附加一個調試器到這一點,也不是比錯誤更EXEC_BAD_INSTRUCTION ,這是沒有幫助的。我如何進一步調試導致錯誤的原因?

+0

在展開之前放置斷點時,標題變量是否包含期望值? – Terry

回答

0

這是在Xcode調試錯誤使用開發cocoapod時,實際的錯誤是:

設URL = NSURL(字符串:Router.baseURLString)?URLByAppendingPathComponent(路徑)

靜調用此方法時,baseURLString尚未設置,導致URL爲零。我看到在現在共享代碼中多次出現調試器指出不正確的行,不知道如何解決。