Question

Ok, j'ai du mal à trouver une réponse à cette question qui ne consiste pas simplement à utiliser JSON ou ASIHTTPRequest.Mais ma question est un peu plus précise, je pense.Je programme uniquement comme passe-temps, donc je ne suis pas un expert.Cela dit, ma compréhension abstraite de cela pourrait être complètement fausse, de sorte que la question pourrait ne pas trouver de réponse.

Fondamentalement, ce que je voudrais faire, c'est envoyer une requête HTTP à un script pHp sur un serveur Web et demander au serveur Web de renvoyer une valeur, disons une simple valeur entière ou une valeur booléenne (pensez à un script de connexion qui renvoie un oui/non ).Je ne m'inquiète pas pour la sécurité à ce stade, car j'essaie de mieux comprendre cela.

D'après ce que je comprends, j'utiliserais quelque chose qui aurait pour effet de

// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]
                    cachePolicy:NSURLRequestUseProtocolCachePolicy
                timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
   // Create the NSMutableData to hold the received data.
   // receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
}  

Cela vient de la documentation Apple, et je comprends généralement cela.Disons donc qu'il envoie des informations via l'URL vers un fichier pHp qui :

//pHp file gets information
//pHp file uses that information to check against a mySQL database
//pHp now has the variable $result with a value of 1 in it

Supposons également que je puisse faire tout cela correctement.Ma question est la suivante : comment puis-je renvoyer une valeur de pHp à la variable iOS 'NSMutableData'.Est-ce que je le « fais écho » ?Par exemple:

echo "$result";

Et puis ce sont les informations mises dans NSMutableData (la variable $result) ?Je sais que si je le faisais strictement via pHp/HTML, etc., je pourrais utiliser quelque chose comme une variable de session pour permettre à d'autres pages d'accéder à la variable.

Ou existe-t-il une autre fonction pHp qui renvoie les données à NSMutabalData dont je ne suis pas au courant ?Fondamentalement, c'est le lien entre les deux avec lequel j'ai des problèmes, le retour des données du script pHp - je ne comprends pas vraiment ce que NSMutableData "obtient".

J'ai essayé d'être aussi détaillé que possible, donc désolé pour la longue question.S'il vous plaît, supposez simplement que c'est tout ce que j'essaie de faire, renvoyer une valeur.La sécurité n'est pas importante (j'essaie de le faire au niveau le plus simple pour la comprendre puis m'appuyer dessus).J'essaie d'éviter toute réponse vague telle que « écrire un service Web » ou « utiliser _' pour le faire, et je suis sûr qu'il existe de nombreuses meilleures façons de le faire, mais je ne me précipite pas sur un programme - j'essaie juste d'apprendre cela pour une meilleure compréhension de NSURLConnection, pHp, NSMUtableData et comment Tous les rouages ​​s'emboîtent.Si ce que je demande est techniquement impossible et n'a pas de sens, j'apprécie également cette réponse.J'ai essayé de chercher et je n'ai pas trouvé de réponse satisfaisante pour cette seule pièce du puzzle.

Merci d'avance.

MODIFIER:

J'ai essayé

...
NSMutableData *receivedData = [[NSMutableData alloc] init];
receivedData = [[NSMutableData data] retain];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
label.text = receivedDataString; 
...

Ce qui appelle un fichier pHp sur le serveur qui est essentiellement :

<?pHp
$result = "TRUE";
var_dump($result);
?>

Ce qui ne marche pas.Je pense que mon problème vient du côté pHp, existe-t-il une commande spéciale qui renvoie une valeur à l'objet NSMutableData ?(Juste quelques informations supplémentaires pour peut-être clarifier davantage ma question).

MODIFIER II :

Je n'arrive pas à répondre directement, probablement parce que je n'ai utilisé le site que de manière anonyme auparavant et que j'ai un tout nouveau compte :) Merci pour votre réponse Charles, j'ai essayé d'utiliser echo et var_dump, ni l'un ni l'autre ne semble envoyer les données (mon objet NSMutableData lorsqu'il est converti en NSString semble être vide - à moins que mon objectif C soit faux, mais je l'ai analysé au strict minimum, donc je ne crois pas que ce soit le cas).

Était-ce utile?

La solution

Ok, je crois que je l'ai fait fonctionner et je vais donc poster une réponse au cas où quelqu'un d'autre chercherait la même chose.

Le fichier PHP sur le serveur est le suivant :

<?php
echo 'Works';
?>

Mon fichier h contient

#import <UIKit/UIKit.h>

@interface SampleViewController : UIViewController {
IBOutlet UIButton *theButton;
NSMutableData *receivedData;}
@property (nonatomic, retain) IBOutlet UIButton *theButton;
-(IBAction) clickTheButton:(id)sender;
@end

Mon fichier m contient la partie pertinente (tout le reste n'est que les éléments standard qu'Apple met dans un fichier m lorsque vous le créez dans le SDK

-(IBAction) clickTheButton:(id)sender {
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"<path to my php file>try.php"]
                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                      timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    receivedData = [[NSMutableData data] retain];
    NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"This1: %@", receivedData);
    NSLog(@"This2: %@", receivedDataString);
} else {
    // Inform the user that the connection failed.
}
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
[receivedData setLength:0];
NSLog(@"This3: %@", receivedData);
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[receivedData appendData:data];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"This4: %@", receivedDataString);
NSLog(@"This5: %@", receivedData);
}

Le résultat NSLogs est le suivant :

Ceci1 :'<>'

Ceci2 :

Ceci3 :'<>'

Ceci4 :Travaux

Ceci5 :'<24726573 756c74>'

Pour répondre à ma question initiale, echo 'Works'; est le code PHP pour renvoyer le mot Works à l'objet NSMutableData.Après avoir établi la connexion, j'ai dû appeler le didRecieveData: méthode pour mettre réellement les informations en écho dans le fichier de données.

Autres conseils

Fondamentalement, c'est le lien entre les deux qui me pose problème, le retour des données du script pHp - je ne comprends pas vraiment ce que NSMutableData "obtient".

Si cela fonctionne comme tout ce qui semble faire simplement une requête HTTP, vous obtiendrez soit une chaîne contenant la sortie de l'URL demandée, soit vous obtiendrez un objet à partir duquel vous pourrez obtenir cette sortie (y compris les en-têtes, etc.) .Je ne connais rien à Objective C ou iOS, mais je vais parier que vous récupérerez simplement la sortie du script.

Autrement dit,

comment puis-je renvoyer une valeur de pHp à la variable iOS 'NSMutableData'.Est-ce que je le « fais écho » ?

Probablement!

Pourquoi ne pas essayer le code et voir ce que vous obtenez ?Si cela fonctionne, alors félicitations :vous avez créé votre premier service Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top