Używam biblioteki Alamofire do łączenia się z API w iOs. Mam problem w jednym z połączeń i nie wiem, czy to z powodu danych zakodowanych w ciele, czy w jakiejkolwiek innej sprawie. Aby wykryć mój błąd, próbuję wydrukować w konsoli treść żądania, aby sprawdzić, czy wysyłam poprawną strukturę danych.Drukuj Alamofire request body
Mój kod jest następujący:
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)
}
}
}
Użytkownik jest odwzorowywalne obiektu, ponieważ używam ObjectMapper połączeniu z Alamofire. Użytkownik jest zdefiniowany przez następujący kod:
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"]
}
}
Nośnik definiowany jest jako Użytkownik, ale z różnymi zmiennymi.
Również chciałbym wiedzieć, oprócz wezwania druk ciała, czy mogę to parametry na życzenie Alimofire w bardziej efektywny sposób (coś jak analizowania obiektu użytkownika i zastąpienie go dla zmiennych parametrów)
Czy masz jakieś pojęcie o moich problemach?
EDIT:
Po sugestię @Travis wreszcie znalazłem rozwiązanie do drukowania treści żądania. Poniżej możesz znaleźć kod:
println("request body: \(NSString(data:req.HTTPBody!, encoding:NSUTF8StringEncoding) as String?)")
O przekazaniu parametrów obiektu nie mogłem go wykonać, poszedłem za oficjalną dokumentacją, ale mogłem to zrobić.
Na żądanie logowania/odpowiedź jest: https://github.com/konkab/AlamofireNetworkActivityLogger – neoneye