2015-11-03 57 views
0

自從升級到9.1後,斯威夫特語法的變化對URL的請求,我已經得到發出請求到我的API錯誤。例如,這個簡單地嘗試登錄的POST請求。我可以直接在API(Strongloop Loopback)Explorer界面中直接登錄,但不能從Swift登錄。我得到這個錯誤:錯誤「操作無法完成。沒有這樣的文件或目錄」

The operation couldn’t be completed. No such file or directory

這裏是我的代碼如下所示:

func performLoginRequestWithURL(url: NSURL, email: String, password: String) { 
      let bodyData = "email=\(email)&password=\(password)" 
      let request: NSMutableURLRequest = NSMutableURLRequest(URL: url) 
      let session = NSURLSession.sharedSession() 
      request.HTTPMethod = "POST" 
      request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding) 

      let task = session.dataTaskWithRequest(request, completionHandler: { 
       data, response, error -> Void in 
       if let error = error { 
        let errString = error.localizedDescription 
        NSNotificationCenter.defaultCenter().postNotificationName(self.lh, object: nil, userInfo: ["Result": errString]) 
        print(error.localizedDescription) 

       } else if data != nil { 
        let json = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String 

        if let dictionary = JSON().parseJSON(json) as [String: AnyObject]? { 
         let accesstoken = dictionary["id"] as! String 
         let id = dictionary["userId"] as! Int 

         // MARK: - Store UID & AccessToken 
         NSUserDefaults.standardUserDefaults().setBool(true, forKey: "userLoggedIn") 
         NSUserDefaults.standardUserDefaults().setInteger(id, forKey: "userId") 
         NSUserDefaults.standardUserDefaults().setObject(accesstoken, forKey: "accessToken") 
         NSUserDefaults.standardUserDefaults().synchronize() 
         NSNotificationCenter.defaultCenter().postNotificationName(self.lh, object: nil, userInfo: ["Result": "Success"]) 
        } 
       } 

      }) 
      task.resume() 
     } 

下面是它曾經是什麼樣子回來時,它的工作,但他們貶值sendAsynchronousRequest方法:

func performLoginRequestWithURL(url: NSURL, email: String, password: String) { 
     let bodyData = "email=\(email)&password=\(password)" 
     var request: NSMutableURLRequest = NSMutableURLRequest(URL: url) 
     request.HTTPMethod = "POST" 
     request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding) 
     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){ 
      response, data, error in 

      if let error = error { 
       let errString = error.localizedDescription 
       NSNotificationCenter.defaultCenter().postNotificationName(self.lh, object: nil, userInfo: ["Result": errString]) 

      } else if data != nil { 
       let json = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 

       if let dictionary = JSON().parseJSON(json) as [String: AnyObject]? { 
        let accesstoken = dictionary["id"] as! String 
        let id = dictionary["userId"] as! Int 
        var results = [String: AnyObject]() 
        results = ["at": accesstoken, "id": id] 

        // MARK: - Store UID & AccessToken 
        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "userLoggedIn") 
        NSUserDefaults.standardUserDefaults().setInteger(id, forKey: "userId") 
        NSUserDefaults.standardUserDefaults().setObject(accesstoken, forKey: "accessToken") 
        NSUserDefaults.standardUserDefaults().synchronize() 
        NSNotificationCenter.defaultCenter().postNotificationName(self.lh, object: nil, userInfo: ["Result": "Success"]) 
       } 
      } 

     } 
    } 

回答

0

事實證明這個問題無關的新的語法和一切與iOS的9和方式請求被製造的T o從模擬器本地主機。我能夠做的請求到我的本地IP 10.x.x.2並且不再工作,我必須使用127.0.0.1代替。當通過電話連接時,這會很困難。我現在得每次更改IP ...

相關問題