2016-05-16 55 views
0

我有以下JSON響應。目前,我的POST請求會在我的控制檯輸出中給我「用戶名」。然而,當我運行應用程序時,我的alertView(在handlingAuthentication中找到,鏈接提供)返回nil。JSON處理錯誤:輸出未正確提取

{ 
    "username" : [ 
    "The username field is required." 
    ], 
    "password" : [ 
    "The password field is required." 
    ] 
} 

我如何:

  • 得到字符串「username字段需要」
  • 字符串傳遞給我的alertview的方法handlingAuthentication
  • 獲得多個字符串從JSON響應(例如,在AlertView中打印:「密碼字段是必需的下一行用戶名字段是必需的。」)

這是我的POST請求

import Foundation 
import Alamofire 
import SwiftyJSON 
import RealmSwift 

class Login { 

init(userName: String, passWord: String) { 
    Data.sharedInstance.userName = userName 
    Data.sharedInstance.passWord = passWord 
} 

// call this method to login 
func getRequest() { 

    Alamofire.request(.POST, Data.todoEndpoint, parameters: ["username": Data.sharedInstance.userName!, "password": Data.sharedInstance.passWord!]) 
     .responseJSON { response in 

      var errorFound = Bool() 
      var errorMessage = String() 

      if let result = response.result.value 
      { 
       let value = JSON(result) 
       var outcome = String() 

       //No username 
       if value["password"] == nil && value["message"] == nil && value["name"] == nil 
       { 
        errorFound = true 
        for output in value { 
         errorMessage = output.0 
         print(errorMessage) 
        } 

       } 

      } 
      else 
      { 
       print("JSON data is nil.") 
      } 

      let errorDict = ["error": errorFound, "message": errorMessage] 
     NSNotificationCenter.defaultCenter().postNotificationName("errorPresent", object:errorDict) 


    } 

} 


} 

的地方,我顯示我的警告消息的代碼是在這裏https://codeshare.io/VilQl

回答

0

OK首先

if(errorFound as! NSObject == 1) 

的應該是給你一個警告,如if let errorFound = dict["error"]{的errorFound所以使用如將已經解開!是多餘的:)

,你可以簡單地說

if(errorFound as NSObject == 1) 

let errorMessage = dict["message"]?.stringValue這可以被替換爲

let errorMessage : String! = dict["message"]! as! String 

,並在情況下,你如果字典裏對關鍵信息或不

任何價值想檢查
if let errorMessage = dict["message"] as? String{ 
    print("\(errorMessage)") 
} 

現在您的警報應該正常顯示:)

編輯

按您的評論:)

if value["message"] == nil && value["name"] == nil 
{ 
    errorFound = true 
    errorMessage = value["username"][0] 
    errorMessage += "\n" 
    errorMessage += value["password"][0] 
} 

這應該通過數據來下一個方法:)

+0

對於我的POST請求,我怎麼了「的用戶名字段是必需的「?我曾嘗試輸出[「用戶名」],但我會被拋出一個「類型元素沒有下標成員」的錯誤。 – noobdev

+0

我試過這樣做,但我會被拋出一個「不能下標類型'JSON'的值的類型'字符串'的索引」錯誤 – noobdev

+0

@noobdev:我不好,你可以嘗試我更新的答案:) –

1

你可以做這樣的事情,

var dict: [NSObject : AnyObject] = [NSObject : AnyObject]() // your response here which you have print in question 
    var arr: [AnyObject] = (dict["username"] as! [AnyObject]) 
    let str: String = arr[0] as! String 

然後通過這個字符串以alertview的消息。

希望這將有助於:)