AFNetworking et rapide
Je vais essayer d'obtenir une réponse JSON à l'aide de Swift.
J'ai reniflé la demande et la réponse -> tout est ok. Toutefois, la valeur de retour est toujours nil
.
let httpClient = AppDelegate.appDelegate().httpRequestOperationManager as AFHTTPRequestOperationManager;
let path = "/daten/wfs";
let query = "?service=WFS&request=GetFeature&version=1.1.0&typeName=ogdwien:AMPELOGD&srsName=EPSG:4326&outputFormat=json".stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
func successBlock(operation: AFHTTPRequestOperation!, responseObject: AnyObject!) {
println("JSON: " + "\(responseObject)")
}
func errorBlock(operation: AFHTTPRequestOperation!, error:NSError!) {
println("Error: " + error.localizedDescription)
}
let urlString = "\(path)" + "/" + "\(query)"
println("urlString: " + httpClient.baseURL.absoluteString + urlString)
J'ai aussi essayé de cette façon:
httpClient.GET(urlString, parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
println("Success")
println("JSON: " + "\(responseObject)")
},
failure:{ (operation: AFHTTPRequestOperation!, error:NSError!) -> Void in
println("Failure")
})
... Mais le responseObject
semble toujours être nil
EDIT:
Peut-être la raison en est la possible mauvaise initialisation dans mon AppDelegate
:
var httpRequestOperationManager: AFHTTPRequestOperationManager? //JAVA SERVER Client
class func appDelegate() -> AppDelegate {
return UIApplication.sharedApplication().delegate as AppDelegate
}
func configureWebservice() {
let requestSerializer = AFJSONRequestSerializer()
requestSerializer.setValue("1234567890", forHTTPHeaderField: "clientId")
requestSerializer.setValue("Test", forHTTPHeaderField: "appName")
requestSerializer.setValue("1.0.0", forHTTPHeaderField: "appVersion")
let responseSerializer = AFJSONResponseSerializer()
AFNetworkActivityIndicatorManager.sharedManager().enabled = true
//##### HTTP #####
let baseURL = NSURL(string: "http://data.wien.gv.at");
httpRequestOperationManager = AFHTTPRequestOperationManager(baseURL: baseURL))
httpRequestOperationManager!.requestSerializer = requestSerializer
httpRequestOperationManager!.responseSerializer = responseSerializer
}
Des suggestions de ce que je fais mal?
Je vous recommande fortement d'utiliser les Alamofire au lieu de AFNetworking. Il est le successeur de AFNetworking complètement réécrit et Swift.
OriginalL'auteur user707342 | 2014-06-05
Vous devez vous connecter pour publier un commentaire.
Swift est entièrement compatible avec le code Objective-C, de sorte que votre problème est pas connecté avec Swift lui-même. Dans
AFNetworking
, leresponseObject
peut parfois êtrenil
. Cela comprend les cas où:204 No Content
code d'état a été retourné,NSURLErrorCannotDecodeContentData
(par exemple inacceptable type de contenu)Découvrez #740 et #1280 pour plus d'informations.
C'est un serveur lié question -> j'ai essayé une autre URL et cela a fonctionné. Merci!
OriginalL'auteur akashivskyy
Vous pouvez utiliser Swift interopérabilité avec Objective-C cadres mais maintenant, il est un fonctionnaire de la bibliothèque de là, nous allons le vérifier:
https://github.com/Alamofire/Alamofire
Cette bibliothèque est écrite en natif Swift, par le créateur de AFNetworking. Vous aurez probablement envie de regarder pour ce genre de chose lors d'un déplacement Rapide. Je l'ai essayé et c'est génial, comme son prédécesseur.
OriginalL'auteur Thiem Nguyen
OriginalL'auteur Nikunj Akabari