Finalización de Twitter: Handler congela la aplicación en caso de éxito

Después de un tweet completo de TWTweetComposeViewController , mi aplicación se bloquea. Salir a la pantalla de inicio y volver parece arreglar esto, y el reloj todavía marca, pero ningún toque se registra en ninguna de mis vistas / controles.

Pensando que algo raro debe estar sucediendo en mi aplicación, hice un nuevo proyecto de plantilla de aplicación de utilidad, lo UIButton con Twitter.framework y networkingefiní el método de IBAction UIButton de la IBAction a esto:

 - (IBAction)showInfo:(id)sender { TWTweetComposeViewController *twt = [[TWTweetComposeViewController alloc] init]; [twt setInitialText:@"some garbage"]; [twt addURL:[NSURL URLWithString:@"http://google.com"]]; twt.completionHandler = ^(TWTweetComposeViewControllerResult r) { NSLog(@"it happened: %d",r); }; [self presentViewController:twt animated:YES completion:NULL]; [twt release]; } 

Después de cancelar (que toma 2 toques, de manera interesante), se puede volver a hacer clic en 'i', pero después de enviar, 'i' no responde hasta background de la aplicación.

¿Alguien ha utilizado esto con éxito? ¿O estoy descaradamente perdiendo algo?

El problema aquí es que está presentando un controller de vista modal (el controller de vista de Twitter es modal); sin embargo, el controller de finalización no descarta el controller de vista modal cuando finaliza. Esto deja al controller de Twitter para capturar todos los toques en la pantalla evitando que su aplicación funcione correctamente.

Debe asegurarse de agregar [self dismissModalViewControllerAnimated: YES]; a su manejador de finalización.

Algo como esto:

 (IBAction)showInfo:(id)sender { TWTweetComposeViewController *twt = [[TWTweetComposeViewController alloc] init]; [twt setInitialText:@"some garbage"]; [twt addURL:[NSURL URLWithString:@"http://google.com"]]; twt.completionHandler = ^(TWTweetComposeViewControllerResult result) { switch (result) { case TWTweetComposeViewControllerResultCancelled: break; case TWTweetComposeViewControllerResultDone: break; default: break; } [self dismissModalViewControllerAnimated:YES]; }; [self presentModalViewController:twt animated:YES]; 

};

En su completionHandler , publique twt .

 twt.completionHandler = ^(TWTweetComposeViewControllerResult r) { NSLog(@"it happened: %d",r); [twt release]; // Unless using ARC }; 

La aplicación no se congela, pero TWTweetComposeView simplemente sigue ahí, captando todos los toques.