Pregunta

Ok, tengo problemas para encontrar una respuesta a esto que no solo use JSON o asihttprequest. Pero mi pregunta es un poco más específica, creo. Solo programa como pasatiempo, así que no soy un experto. Dicho esto, mi comprensión abstracta de esto podría estar completamente fuera de lugar, por lo que la pregunta podría no ser respondida.

Básicamente, lo que me gustaría hacer es enviar una solicitud HTTP a un script PHP en un servidor web y hacer que el servidor web devuelva un valor, digamos un valor entero simple o un valor de bool (piense en un script de inicio de sesión que devuelve un sí/no ). No me preocupa la seguridad en este momento, ya que estoy tratando de facilitar mi camino para comprender esto.

Por lo que deduzco, usaría algo en el sentido 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.
}  

Esto es de la documentación de Apple, y generalmente entiendo esto. Entonces, digamos que envía información a través de la URL a un archivo PHP que entonces:

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

Además, suponga que puedo hacer todo eso bien. Mi pregunta es, ¿cómo devuelvo un valor de PHP de nuevo a la variable de iOS 'NSMUTABLED'? ¿Lo 'hago'? Por ejemplo:

echo "$result";

¿Y luego esa es la información puesta en el NSMUTABLEDATA (la variable $ resultado)? Sé que si lo estaba haciendo estrictamente a través de PHP/HTML, etc., podría usar algo como una variable de sesión para permitir más páginas para acceder a la variable.

¿O hay alguna otra función de PHP que devuelva los datos a NSMutabaldata de la que desconoce? Básicamente, este es el enlace entre los dos con los que tengo problemas, el regreso de los datos del script PHP: realmente no entiendo qué es que NSMUTABLEDATA está 'obteniendo'.

He tratado de ser lo más detallado posible, lo siento por la larga pregunta. Por favor, asuma que esto es todo lo que estoy tratando de hacer, devuelve un valor. La seguridad no es importante (estoy tratando de hacer esto en el nivel más simple para entenderlo y luego construirlo). Estoy tratando de evitar cualquier respuesta vago como 'escribir un servicio web' o 'usar _'Para hacerlo, y estoy seguro de que hay muchas mejores maneras de hacerlo, pero no estoy apresurando a un programa, solo estoy tratando de aprender esto para una mejor comprensión de NsurlConnection, PHP, NSMUTABLEDA y cómo Al los engranajes encajan. Si lo que pregunto es técnicamente imposible y no tiene sentido, también aprecio esa respuesta. He intentado buscar y no he encontrado una respuesta satisfactoria para esta sola pieza del rompecabezas.

Gracias por adelantado.

EDITAR:

He intentado

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

Que llama a un archivo PHP en el servidor que es básicamente:

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

Que no funciona. Creo que mi problema está en el lado de PHP, ¿hay algún comando especial que devuelva un valor al objeto NSMUTABLEDATA? (Solo información adicional para quizás aclarar más mi pregunta).

Editar II:

Parece que no puedo responder directamente, probablemente porque solo he usado el sitio de forma anónima antes y tengo una cuenta nueva :) Gracias por su respuesta Charles, he tratado de usar Echo y Var_dump, ninguno de los dos parece enviar. Los datos de nuevo (mi objeto nsmutableata cuando se convierte en un NSString parece estar vacío, a menos que mi objetivo C esté mal, pero lo he analizado hasta el mínimo, así que no creo que ese sea el caso).

¿Fue útil?

Solución

Ok, creo que lo hice funcionar, así que voy a publicar una respuesta en caso de que cualquier otra persona esté buscando lo mismo.

El archivo PHP en el servidor es el siguiente:

<?php
echo 'Works';
?>

Mi archivo 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

Mi archivo M contiene en la parte relevante (todo lo demás es solo las cosas estándar que Apple pone en un archivo M cuando lo crea en 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);
}

La salida de NSLOGS de la siguiente manera:

This1: '<>'

Este2:

This3: '<>'

This4: funciona

This5: '<24726573 756c74>'

Para responder a mi pregunta original, echo 'Works'; es el código PHP para devolver la palabra funciona al objeto nsmutableata. Después de configurar la conexión, necesitaba llamar al didRecieveData: Método para poner la información ecológica en el archivo de datos.

Otros consejos

Básicamente, este es el enlace entre los dos con los que tengo problemas, el regreso de los datos del script PHP: realmente no entiendo qué es que NSMUTABLEDATA está 'obteniendo'.

Si funciona como cualquier otra cosa que parezca que solo está haciendo una solicitud HTTP, obtendrá una cadena que contiene la salida de la URL solicitada, o obtendrá un objeto del que puede obtener esa salida (incluidos los encabezados, etc.) . No sé nada sobre el objetivo C o iOS, pero voy a apostar que solo obtendrá la salida del script.

En otras palabras,

¿Cómo devuelvo un valor de PHP a la variable de iOS 'NSMUTABLED'? ¿Lo 'hago'?

¡Probablemente!

¿Por qué no pruebas el código y ves lo que obtienes? Si funciona, entonces felicitaciones: ha creado su primer servicio web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top