Domanda

Ok, ho problemi a trovare una risposta a questo che non è solo usare JSON o AsihttPrequest. Ma la mia domanda è un po 'più specifica, penso. Prograllo solo come hobby, quindi non sono un esperto. Detto questo, la mia comprensione astratta di questo potrebbe essere completamente fuori base, quindi la domanda potrebbe non essere responsabile.

Fondamentalmente, quello che vorrei fare è inviare una richiesta HTTP a uno script PHP su un server Web e avere il server Web restituire un valore, diciamo un semplice valore intero o un valore bool (pensa a uno script di accesso che restituisce un sì/no ). A questo punto non sono preoccupato per la sicurezza perché sto cercando di facilitare la mia strada per capire questo.

Da quello che raccolgo, userei qualcosa per l'effetto di

// 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.
}  

Questo proviene dalla documentazione di Apple e generalmente lo capisco. Quindi diciamo che invia informazioni tramite l'URL a un file PHP che quindi:

//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

Inoltre, supponiamo di poter fare tutto bene. La mia domanda diventa: come restituisco un valore da PHP alla variabile "nsmutabletata" iOS. Lo "eco"? Per esempio:

echo "$result";

E poi sono le informazioni inserite in NSMUTABLABABATA (il risultato variabile $)? So che se lo stavo facendo rigorosamente tramite PHP/HTML ecc., Potrei usare qualcosa come una variabile di sessione per consentire a ulteriori pagine di accedere alla variabile.

O esiste qualche altra funzione PHP che restituisce i dati a NSMutabalta di cui non sono a conoscenza? Fondamentalmente questo è il legame tra i due con cui ho problemi, il ritorno dei dati dallo script PHP - non capisco davvero cosa sia che nsmutabletata sta "ottenendo".

Ho cercato di essere il più dettagliato possibile, quindi mi dispiace per la lunga domanda. Per favore, supponiamo solo che questo sia tutto ciò che sto cercando di fare, restituisce un valore. La sicurezza non è importante (sto cercando di farlo al livello più semplice per capirlo, quindi basarsi su di essa). Sto cercando di evitare eventuali risposte vaghe come "Scrivi un servizio web" o "usa _'Per farlo, e sono sicuro che ci sono molti modi migliori per farlo, ma non sto correndo fuori un programma - sto solo cercando di imparare questo per una migliore comprensione di NsurlConnection, PHP, NSMUtabletata e come Al gli ingranaggi si adattano insieme. Se quello che chiedo è tecnicamente impossibile e non ha senso, apprezzo anche quella risposta. Ho provato a cercare e non ho trovato una risposta soddisfacente per questo singolo pezzo del puzzle.

Grazie in anticipo.

MODIFICARE:

ho provato

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

Che chiama un file PHP sul server che è fondamentalmente:

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

Che non funziona. Penso che il mio problema sia sul lato PHP, c'è un comando speciale che restituisce un valore all'oggetto NSMUTABATABATA? (Solo alcune informazioni extra per chiarire di più la mia domanda).

Modifica II:

Non riesco a rispondere direttamente, probabilmente perché ho mai usato il sito solo anonimamente prima e ho un nuovo account :) Grazie per la tua risposta Charles, ho provato a usare Echo e Var_Dump, nessuno dei due sembrano inviare I dati back (il mio oggetto NSMUTABLABATATA quando convertito in un NSString sembra essere vuoto - a meno che il mio obiettivo C non sia sbagliato, ma l'ho analizzato al minimo praticamente indispensabile, quindi non credo che sia così).

È stato utile?

Soluzione

Ok, credo di averlo fatto funzionare e quindi pubblicherò una risposta nel caso in cui qualcun altro stia cercando lo stesso.

Il file PHP sul server è il seguente:

<?php
echo 'Works';
?>

Il mio file H contiene

#import <UIKit/UIKit.h>

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

Il mio file m contiene nella parte pertinente (tutto il resto è solo la roba standard che Apple inserisce in un file M quando lo crea in 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);
}

L'output NSLOGS come segue:

This1: '<>'

This2:

This3: '<>'

This4: funziona

This5: '<24726573 756c74>'

Per rispondere alla mia domanda originale, echo 'Works'; è il codice PHP per restituire la parola funziona all'oggetto nsmutabletata. Dopo aver impostato la connessione, dovevo chiamare il didRecieveData: Metodo per inserire effettivamente le informazioni echeggiate nel file di dati.

Altri suggerimenti

Fondamentalmente questo è il legame tra i due con cui ho problemi, il ritorno dei dati dallo script PHP - non capisco davvero cosa sia che nsmutabletata sta "ottenendo".

Se funziona come ogni altra cosa che sembra che stia solo facendo una richiesta HTTP, otterrai una stringa contenente l'output dall'URL richiesto, oppure otterrai un oggetto da cui puoi ottenere tale output (comprese le intestazioni, ecc. . Non so nulla dell'obiettivo C o iOS, ma ho intenzione di scommettere che otterrai l'output della sceneggiatura.

In altre parole,

Come restituisco un valore da PHP alla variabile "nsmutabletata" iOS. Lo "eco"?

Probabilmente!

Perché non provi il codice e vedi cosa ottieni? Se funziona, allora congratulazioni: hai creato il tuo primo servizio web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top