2014-06-17 4 views
7

this question을 읽고 Swift에서 AFNetworking의 responseObject에서 JSON을 구문 분석하려고했지만 결과는 항상 nil입니다. 여기AFNetworking의 responseObject에서 JSON을 구문 분석 할 수 없습니다.

내 코드에서 발췌 한 것입니다

let manager = AFHTTPRequestOperationManager() 

manager.requestSerializer = AFJSONRequestSerializer() 
manager.responseSerializer = AFJSONResponseSerializer() 
manager.requestSerializer.setAuthorizationHeaderFieldWithUsername(username, password: password) 

manager.POST("endpoint-that-respond-token-in-json", 
    parameters: nil, 
    success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in 
     println(responseObject.description) // { token = "bd8f26da-219a-4a88-be80-b09207dfc067"; } 

     var x: NSString = responseObject.description 

     var error: NSError? 
     var data = x.JSONString().dataUsingEncoding(NSUTF8StringEncoding) 
     println(data) // <227b5c6e 20202020 746f6b65 6e203d20 5c226539 35613462 36642d38 6361612d 34343537 2d623937 612d3330 63613236 62316338 34315c22 3b5c6e7d 22> 

     var dataString = NSString(data: data, encoding: NSUTF8StringEncoding) 
     println(dataString) // "{\n token = \"e95a4b6d-8caa-4457-b97a-30ca26b1c841\";\n}" 


     var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary! 
     println(json) // nil 
    }, 
     failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in 
     println(error) 
    }) 

N.B.

var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary // without "!" I will get EXC_BAD_INSTRUCTION at run time. 

답변

10

당신은 예를

manager.POST("endpoint-that-respond-token-in-json", 
parameters: nil, 
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in 
    println(responseObject.description) // { token = "bd8f26da-219a-4a88-be80-b09207dfc067"; } 

    let responseDict = response as Dictionary<String, AnyObject> 
    var token = responseDict["token"] as String! 
    println(token) 

}, 
    failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in 
}) 

추신에 대한

을 사전에 responseObject 전송할 수 있습니다 사전에서 반환 값은 항상 선택

편집 : Xcode6 베타 2 릴리스 후 위의 코드는 더 이상 작동하지 않습니다. AnyObject에 먼저 캐스팅하고 문자열로 변환해야합니다.

let token : String? = (responseDict["token"] as AnyObject?) as? String 
+0

오, 내 생명을 구했어. 큰 감사를 드린다. – attomos

관련 문제