Este blog ofrece una buena solución para manejar múltiples NSURLConnections: crear una clase personalizada "CustomURLConnection" que tenga una propiedad adicional tag
.Usando la subclase personalizada de NSURLConnection, ¿cómo "encuentra" los datos adicionales en la clase más adelante?
http://blog.emmerinc.be/index.php/2009/03/02/custom-nsurlconnection-class-with-tag/
http://blog.emmerinc.be/index.php/2009/03/15/multiple-async-nsurlconnections-example/
Básicamente, simplemente se ha añadido una propiedad tag
a la NSURLConnection exsisting:
CustomURLConnection.m
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately tag:(NSString*)tag {
self = [super initWithRequest:request delegate:delegate startImmediately:startImmediately];
if (self) {
self.tag = tag;
}
return self;
}
luego, más tarde en la normalidad NSURLConnection carga de metanfetamina ods, puede hacer:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
//Log the connection’s tag
CustomURLConnection *ttttag = (CustomURLConnection *)connection; // **HERE**
NSLog(@”%@”, ttttag.tag);
NSMutableData *dataForConnection = [self dataForConnection:(CustomURLConnection*)connection];
[connection release];
}
Entonces, ahí es donde estoy teniendo problemas. La forma en que lo veo, esto es cómo van las cosas:
- puedo crear una "conexión + etiqueta"
- El primer fragmento de código que he publicado anteriormente crea una "conexión" regular (sin
tag
), que eventualmente llame a los métodos normales de NSURLConnection comoconnectionDidFinishLoading
. ¿Qué pasa con eltag
en este punto? - En el método
connectionDidFinishLoading
, puedo volver a conectar la conexión en una "etiqueta de conexión +", y luego encontrar esa información de etiqueta faltante que se ha descartado. ¿Cómo?
Tal vez estoy confundiendo a mí mismo, pero parece como si el tag
se descartó cuando se inicia por la NSURLConnection
camino normal. Pero luego al convertirlo en la subclase, puedo recuperar nuevamente la propiedad tag
. ¿Dónde vivió/se fue mientras tanto?
¿Podría alguien con un mejor entendimiento de la herencia explicarme esto?
No está haciendo una conversión real, todos los objetos Obj-C son simplemente un puntero a una dirección de memoria. Solo le está diciendo al compilador que * supone * que es un 'CustomURLConnection' en el momento de la compilación y esto no tiene ningún impacto en la ejecución real de su código. –