Publicación de Twitter iOS6 Problema con el button "Cancelar"

Estoy en el process de cambiar mi aplicación para el uso de iOS6 y iPhone, no puedo entender por qué cuando publico desde Twitter usando el nuevo marco social tengo que presionar 'Cancelar' dos veces para cerrar, cualquier otra persona tiene esto problema o una solución? Aquí está el código para el button.

- (IBAction)twitterPost:(id)sender { if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { mySLComposerSheet = [[SLComposeViewController alloc] init]; mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; [mySLComposerSheet setInitialText:[NSString stringWithFormat:@"This is my tweet, hello!",mySLComposerSheet.serviceType]]; [self presentViewController:mySLComposerSheet animated:YES completion:nil]; } [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { NSLog(@"dfsdf"); switch (result) { case SLComposeViewControllerResultCancelled: break; case SLComposeViewControllerResultDone: break; default: break; } }]; } 

Si estás usando mySLComposerSheet esto funciona muy bien …

 [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil]; 

Mi experiencia con SLComposeViewController es que los controlleres de twitter y weibo deben descartarse manualmente, mientras que el controller de Facebook parece ser mejor comportado.

Si no descartes ViewControllerAnimated, presionar el button "Enviar" enviará el tweet o la publicación de Weibo, pero me quedaré con lo que parece ser una vista invisible sobre mi propia vista. Por lo tanto, ya no puedo interactuar con mi aplicación.

No sé por qué mi aplicación está funcionando así … Curiosamente, la finalizaciónHandler para cancelar se llama solo una vez. El segundo toque desecha el controller de vista.

 + (void) shareText:(NSString*)text image:(UIImage*)image social:(NSString*)service url:(NSString*)url { SLComposeViewController* controller = [SLComposeViewController composeViewControllerForServiceType:service]; [controller setInitialText:text]; [controller addImage:image]; [controller addURL:[NSURL URLWithString:url]]; controller.completionHandler = ^(SLComposeViewControllerResult result) { if( SLComposeViewControllerResultDone == result ) { NSLog(@"rewards for share: %@!", service ); } if( ![SLServiceTypeFacebook isEqualToString:service] ) // facebook behaves [[CBLAppDelegate instance].activeViewController dismissViewControllerAnimated:true completion:nil]; }; [[CBLAppDelegate instance].activeViewController presentViewController:controller animated:true completion:nil]; } 

Encontró el problema. Solo ocurre cuando se agrega un manejador de finalización a TWTweetComposeViewController. Si se agrega, asegúrese de llamar:

[self dismissModalViewControllerAnimated: YES];

Prueba este amigo

  [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { switch (result) { case SLComposeViewControllerResultCancelled: [self performSelector:@selector(showalert)]; [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil]; break; case SLComposeViewControllerResultDone: [self performSelector:@selector(showalert1)]; [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil]; break; default: break; } }]; 

Publicando el comentario anterior como una respuesta:

¿Ha intentado configurar the completionHandler antes de presentar el controller de vista?