Tengo varias vistas que hacen el mismo NSURLRequest/NSURLConnection request
. Idealmente, para obtener un poco de reutilización de código, me gustaría tener algún tipo de "proxy" que haga todo el trabajo subyacente de crear/ejecutar la solicitud/conexión (asíncrona), configurar todos los métodos delegados, etc. , así que no tengo que copiar todos los manejadores de métodos delegados NSURLConnection
en cada vista. En primer lugar, ¿este enfoque de diseño es razonable? En segundo lugar, ¿cómo haría para hacer algo así?NSURLConnection NSURLSolicitud de proxy para llamadas al servicio web asíncronas
Para obtener un poco de información de antecedentes, intenté esto y lo puse a "funcionar", sin embargo, no parece ejecutarse de forma asíncrona. He creado un archivo Proxy.h/m, que cuenta con métodos de instancia para las diferentes llamadas de servicio web (y también contiene los métodos de delegado NSURLConnection
):
@interface Proxy : NSObject {
NSMutableData *responseData;
id<WSResponseProtocol> delegate;
}
- (void)searchForSomethingAsync:(NSString *)searchString delegate:(id<WSResponseProtocol>)delegateObj;
@property (nonatomic, retain) NSMutableData *responseData;
@property (assign) id<WSResponseProtocol> delegate;
@end
El WSResponseProtocol se define como tal:
@protocol WSResponseProtocol <NSObject>
@optional
- (void)responseData:(NSData *)data;
- (void)didFailWithError:(NSError *)error;
@end
Para usar esto, el controlador de vista simplemente necesita cumplir con el protocolo WSResponseProtocol
, para capturar la (s) respuesta (s). Hacer la llamada de servicio web se realiza de este modo:
Proxy *p = [[Proxy alloc] init];
[p searchForSomethingAsync:searchText delegate:self];
[p release];
me puede dar más código, pero el resto se puede suponer. Antes de llamar, comienzo a "Animar" a un spinner UIActivityIndicatorView
. Pero la ruleta nunca gira. Si simplemente pongo los métodos de delegado de NSURLConnection directamente en el controlador de vista, el girador gira. Entonces, me hace pensar que mi implementación no se está ejecutando de forma asíncrona. ¿Alguna idea/pensamiento aquí?
Ah - ¡muy bien! Veo lo que dices: tu solución eliminaría la necesidad de un protocolo. ¡Mucho más directo! ¡Gracias por eso! Creo que estoy empezando a calentarme a la solución que sugirió Kendal, es decir, tener NSURLConnections sincrónicas envueltas en una NSOperation y lanzadas en una cola. Esa solución puede ser una solución más directa al problema de crear un marco de llamadas a servicios web sincronizados, aunque mi enfoque + su visión aún es viable. – tbehunin
Revertir mi comentario anterior. Este enfoque es el enfoque con el que voy versus las NSURLConnections sincrónicas dentro de una NSOperation. NSURLConnection ya proporciona el subprocesamiento que necesito sin ponerlo en una NSOperation. Además, después de leer más blogs, la autenticación NSURLConnections + sincrónica no proporciona tantos "ganchos" como las llamadas asincrónicas. – tbehunin
Donde \ cómo se declara receivedData. La documentación sigue diciendo que está declarada en otra parte, pero no brinda información sobre cómo hacerlo. –