2014-07-17 3 views
0

J'ai créé une application iPhone pour mon Arduino et, fondamentalement, l'Arduino peut communiquer sur le réseau local en utilisant des commandes très basiques fournies par une API REST tierce. J'ai réussi à utiliser l'API via le navigateur Web de mon ordinateur, mais lorsque j'essaie d'envoyer une requête via une application iPhone, elle ne semble pas vouloir fonctionner. Gardez aussi à l'esprit, je peux obtenir l'API pour répondre correctement via Safari sur mon iPhone. La seule réponse que je reçois (dans la console) est:NSURLSession n'atteignant pas le serveur

{ URL: http://192.168.0.216/mode/7/0 } { status code: 200, headers { 
    Connection = close; 
    "Content-Type" = "application/json"; 
} } : <7b226d65 73736167 65223a20 2250696e 20443722 6964223a 20223030 38222c20 226e616d 65223a20 226d6967 6874795f 63617422 2c202263 6f6e6e65 63746564 223a2074 7275657d 0d0a> 

L'API est en effet censé renvoyer des données JSON, mais la réponse du navigateur Web affecte réellement LED de mon Arduino.

code pour tourner la LED sur

NSURL *modeSet = [NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.0.216/digital/%d/1", _pin]]; 

NSURLSession *session = [NSURLSession sharedSession]; 
[[session dataTaskWithURL:modeSet 
     completionHandler:^(NSData *data, 
          NSURLResponse *response, 
          NSError *error) { 
      NSLog([NSString stringWithFormat:@"%@ : %@", response, data]); 
     }] resume]; 

EDIT: J'ai décidé d'imprimer la variable « Error » pour voir si elle avait quelque chose retient de moi, et je trouve ceci:

Error Domain=NSURLErrorDomain Code=-1001 "The operation couldn’t be completed. 
(NSURLErrorDomain error -1001.)" UserInfo=0x17807b840 {NSErrorFailingURLStringKey=http://192.168.0.216/mode/7/o, 
NSUnderlyingError=0x178449450 "The operation couldn’t be completed. 
(kCFErrorDomainCFNetwork error -1001.)", NSErrorFailingURLKey=http://192.168.0.216/mode/7/o} 
+0

1 . Quelle est la question? 2. Convertissez les données JSON en une chaîne et NSLog ou à un objet et NSLog l'objet pour voir ce qui est retourné. – zaph

+0

La question est de savoir comment cela n'arrive pas réellement à l'Arduino? Je reçois une réponse, mais il dit que la connexion est fermée avec le code d'état 200 (succès) et le JSON n'est pas ce qu'il devrait être. Le JSON dans le navigateur est en anglais. –

+0

Il atteint l'Arduino, c'est pourquoi il y a un retour un statut de 200 et une réponse JSON de '{" message ":" Pin D7 "id": "008", "name": "mighty_cat", "connecté" ": true}'. – zaph

Répondre

2

pré-iOS 9 réponse

répondre à ma propre question, donc si quelqu'un trouve ce par Google parfois, ils n'auront pas à demander. Tout ce que je l'ai été formaté ma chaîne correctement avec NSUTF8Encoding comme ceci:

NSString *modeSetString = [[NSString stringWithFormat:@"http://192.168.0.216/mode/%d/o", _pin] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *modeSet = [NSURL URLWithString:modeSetString]; 

iOS 9 Mise à jour

stringByReplacingPercentEscapesUsingEncoding: est maintenant dépréciée et stringByRemovingPercentEncoding doit être utilisé à la place comme ceci:

NSString *modeSetString = [[NSString stringWithFormat:@"http://192.168.0.216/mode/%d/o", _pin] stringByRemovingPercentEncoding]; 
NSURL *modeSet = [NSURL URLWithString:modeSetString]; 
Questions connexes