2015-07-15 12 views
9

मैं आईओएस में एक एपीआई के साथ कनेक्ट करने के लिए अलामोफायर लाइब्रेरी का उपयोग कर रहा हूं। मुझे कनेक्शन में से एक में समस्या है, और मुझे नहीं पता कि यह शरीर या किसी अन्य चीज में एन्कोड किए गए डेटा की वजह से है या नहीं। मेरी त्रुटि का पता लगाने के लिए, मैं कंसोल में अनुरोध करने के लिए अनुरोध कर रहा हूं कि मैं सही डेटा संरचना भेज रहा हूं या नहीं।प्रिंट अलामोफायर अनुरोध निकाय

func updateUser (#user: User, completionHandler: (responseObject: User?, error: AnyObject?) ->()) { 
    let parameters = [ 
     "_id": "\(user._id!)", 
     "email": "\(user.email!)", 
     "media": "\(Mapper().toJSONArray(user.media!))", 
     "blogs": "\(Mapper().toJSONArray(user.blogs!))" 
    ] 

    var manager = Alamofire.Manager.sharedInstance 
    manager.request(.PUT, apiUrl + "/route/to/api", parameters: parameters, encoding: .JSON) 
     .responseObject{ (req: NSURLRequest, res: NSHTTPURLResponse?, user: User?, data: AnyObject?, error: NSError?) in 
      if(error != nil) { 
       NSLog("Error API updateUser: \(error)") 
      } 
      else { 
       completionHandler(responseObject: user as User?, error: data) 
      } 
    } 
} 

उपयोगकर्ता एक mappable वस्तु है, के बाद से मैं ObjectMapper उपयोग कर रहा हूँ Alamofire के साथ संयुक्त:

मेरे कोड निम्नलिखित है। उपयोगकर्ता को निम्नलिखित कोड द्वारा परिभाषित किया गया है:

class User: Mappable { 
    var _id: String? 
    var name: String? 
    var media: [Media]? 

    init(_id: String, name: String, media: [Media]){ 
     self._id = _id; 
     self.name = name; 
     self.media = media 
    } 

    required init=(_ map: Map){ 
     mapping(map) 
    } 

    func mapping(map: Map){ 
     _id <- map["_id"] 
     name <- map["name"] 
     media <- map["media"] 
    } 
} 

मीडिया को उपयोगकर्ता की तरह परिभाषित किया गया है, लेकिन विभिन्न चर के साथ।

इसके अलावा, मुझे पता है, की छपाई अनुरोध शरीर अलावा, अगर मैं Alimofire अनुरोध करने के लिए मानकों को एक और अधिक कुशल तरीके से (कुछ उपयोगकर्ता वस्तु को पार्स और चर पैरामीटर के लिए यह प्रतिस्थापन की तरह)

शामिल हो सकते हैं चाहते हैं

मेरी समस्याओं के बारे में कोई विचार?

संपादित करें:

@Travis के सुझाव के बाद, अंत में मैं अनुरोध शरीर मुद्रण के लिए समाधान मिल गया। नीचे आप कोड मिल सकता है:

println("request body: \(NSString(data:req.HTTPBody!, encoding:NSUTF8StringEncoding) as String?)") 

गुजर एक वस्तु मैं यह काम नहीं कर सकता है पैरामीटर के रूप में के बारे में, मैं आधिकारिक दस्तावेज पीछा किया, लेकिन मैं यह कर सकता है।

+0

प्रवेश अनुरोध के लिए/प्रतिक्रिया है: https://github.com/konkab/AlamofireNetworkActivityLogger – neoneye

उत्तर

7

अपने पहले सवाल का जवाब है,

println("request body: \(request.HTTPBody)") 

जहां तक ​​अपने 2 प्रश्न चला जाता है, वहाँ एपीआई पैरामीटर अमूर्त पर एक पूरा अनुभाग के साथ-साथ Alamofire main page पर CRUD & प्राधिकरण है।

+1

आप अपने जवाब के लिए धन्यवाद, लेकिन request.HTTBody वापसी एनएसडीटा ऑब्जेक्ट, और मुझे नहीं पता कि यह वह स्ट्रिंग है जो मुझे उम्मीद है। मुझे इस तरह कुछ प्राप्त करने की उम्मीद है: _ // HTTP बॉडी: {"foo": [1, 2, 3], "bar": {"baz": "qux"}} _ (मेरे स्वयं के चर के साथ), और मैं निम्नलिखित प्राप्त करता हूं: _ <7b225f69 64223a22 35353962 61656165 ..._ – Alfonso

+0

NSData को स्ट्रिंग (या JSON) में कनवर्ट करने के कई तरीके हैं। मैं उनमें से एक को खोजने के लिए यहां खोज का उपयोग करने का सुझाव दूंगा। – Travis

0

बस इसे थोड़ा आसान बनाने के लिए।

if let requestBody = request.request?.HTTPBody { 
     do { 
      let jsonArray = try NSJSONSerialization.JSONObjectWithData(requestBody, options: []) 
      print("Array: \(jsonArray)") 
     } 
     catch { 
      print("Error: \(error)") 
     } 
    } 
24

लिए स्विफ्ट 3+

print(NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)) 
+0

स्विफ्ट 3.0 पर आधारित यह वास्तव में अच्छा डेमो है, यह मेरी तरफ से काम कर रहा है। – Kevin

संबंधित मुद्दे