¿Cómo puedo recibir datos de URL en el iPhone?
-
09-09-2019 - |
Pregunta
Estoy usando el código del documento de Apple para hacer algún tipo de comunicación HTTP. Puedo conectar con la URL con éxito, pero no para recibir los datos de mi servidor.
// create the request
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..."]
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 that will hold
// the received data
// receivedData is declared as a method instance elsewhere
NSMutableData *receivedData=[[NSMutableData data] retain];
} else {
// inform the user that the download could not be made
}
La razón puede ser:
-
Declaro
receivedData
en la propia acción. La anotación dice que debería declarar en otro lugar. ¿Dónde debería declararlo? Debería declarar como propiedad del controlador? -
¿Cómo se puede encontrar el URL
[[NSMutableData data] retain]
ya que está fuera de laif{}
?
Solución
Cuando se utiliza de NSURLConnection initWithRequest: delegado: método, los datos (junto con otras cosas) se envía al objeto delegado en una secuencia de llamadas a métodos. Los métodos son opcionales, así que si su objeto delegado no implementa ellos, el objeto de conexión sólo les salta.
Hay un montón de métodos, por lo que no voy a enumerarlas todas, pero todos están descritos en detalle en la documentación NSURLConnection. Para obtener los datos recibidos que querrá aplicar -conexión: didReceiveData: en el objeto delegado. Este método será llamado, potencialmente más de una vez, con un objeto NSData que representa los datos recibidos recientemente. A continuación, puede añadir que a su objeto NSMutableData existente o hacer cualquier otra cosa que tiene sentido con ella. Usted sabrá que ha recibido todos los datos cuando -connectionDidFinishLoading:. Se llama en el objeto delegado
Para responder a sus dos preguntas específicas:
-
Sí, usted debe declarar como una propiedad del objeto controlador. También debe asegurarse de asignar el objeto antes de llamar initWithRequest de NSURLConnection: delegar :, ya que la conexión se iniciará la carga de datos de forma asíncrona, tan pronto como se crea el objeto de conexión. Alternativamente, usted podría implementar -conexión: didReceiveResponse:. En el delegado, comprobar el estado de HTTP, y crear el objeto de datos a continuación
-
El objeto de datos mutables no puede encontrar el URL, la conexión, o sus datos a medida que lo tienes configurado, pero si usted sigue los pasos que he descrito a continuación, puede añadir datos a ella como se trata, y lo utilizan cuando se termina la conexión.