Utilizando la nueva API TWRequest
de iOS 5, me encontré con un muro de ladrillos relacionado con el uso de bloques.Uso de bloques dentro de bloques en Objective-C: EXC_BAD_ACCESS
Lo que tengo que hacer es que al recibir una respuesta exitosa a una primera solicitud, dispare inmediatamente otra. En el bloque de finalización de la segunda solicitud, notifico el éxito o el fracaso de la operación de múltiples pasos.
Aquí es más o menos lo que estoy haciendo:
- (void)doRequests
{
TWRequest* firstRequest = [self createFirstRequest];
[firstRequest performRequestWithHandler:^(NSData* responseData,
NSHTTPURLResponse* response,
NSError* error) {
// Error handling hidden for the sake of brevity...
TWRequest* secondRequest = [self createSecondRequest];
[secondRequest performRequestWithHandler:^(NSData* a,
NSHTTPURLResponse* b,
NSError* c) {
// Notify of success or failure - never reaches this far
}];
}];
}
Yo no soy de retención cualquiera de las solicitudes o mantener una referencia a ellos en cualquier lugar; es solo fuego y olvidar.
Sin embargo, cuando ejecuto la aplicación, se estrella con EXC_BAD_ACCESS
en:
[secondRequest performRequestWithHandler:...];
Se ejecuta la primera solicitud muy bien, pero cuando trato de poner en marcha una segunda con un controlador, que se estrelle. ¿Qué pasa con ese código?
Los métodos para crear las solicitudes son tan simples como:
- (TWRequest*)createFirstRequest
{
NSString* target = @"https://api.twitter.com/1/statuses/home_timeline.json";
NSURL* url = [NSURL URLWithString:target];
TWRequest* request = [[TWRequest alloc]
initWithURL:url parameters:params
requestMethod:TWRequestMethodGET];
// _twitterAccount is the backing ivar for property 'twitterAccount',
// a strong & nonatomic property of type ACAccount*
request.account = _twitterAccount;
return request;
}
publique el código de 'createFirstRequest' y' createSecondRequest' – vikingosegundo
¿Puede publicar el código para '-createSecondRequest'? Supongo que hay un problema con este código que se ejecuta en un hilo de fondo ya que nunca hay una garantía sobre qué hilo ejecutará un controlador de finalización. –
Hecho; lo siento por eso, no pensé que sería relevante. – biasedbit