2012-09-27 38 views
14

Estoy en el proceso de cambiar mi aplicación para iOS6 y uso de iPhone, parece que no puedo entender por qué cuando publico desde Twitter usando el nuevo marco social tengo que presionar 'Cancelar' dos veces para cerrar, ¿alguien más tiene este problema o una solución? Aquí está el código para el botón.Publicación de Twitter iOS6 'Cancelar' botón cuestión

- (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; 
    } 
}]; 


} 
+2

¿Ha intentado fijar la completionHandler antes de presentar el controlador de vista? – ale0xB

+0

Eso hizo el trabajo, gracias Alex. –

+0

Bueno, publiqué el comentario como respuesta (ver a continuación). ¡Aclamaciones! – ale0xB

Respuesta

18

Si su uso de la mySLComposerSheet esto funciona muy bien ...

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

Y luego debe recordar NO hacer esto para un SLComposeViewController de Facebook, que auto-se descarta! rdar: 12440972 –

+0

Sí, olvidé mencionar eso. –

+0

@Steven, ¿puedes comprobar si Apple ha solucionado esto a partir de hoy? Recientemente arreglaron una gran cantidad de rdars ... – Klaas

1

publicación de comentarios de más arriba como una respuesta:

Ha intentado establecer el completionHandler antes de presentar el controlador de vista?

7

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

[self dismissModalViewControllerAnimated: YES];

+0

Ver mi respuesta ... –

+0

Utilice '[self dismissViewControllerAnimated: YES completion: nil];' en lugar de '[self dismissModalViewControllerAnimated: YES];' –

9

Mi experiencia con SLComposeViewController es que los controladores de Twitter y Weibo necesitan ser despedido de forma manual mientras el controlador Facebook parece estar mejor comportamiento.

Si no dejo de lado a ViewControllerAnimated, presionando el botón "Enviar" enviaré el tweet o 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 funciona así ... Curiosamente, el comando completionHandler para cancelar se llama una sola vez. El segundo toque cierra el controlador 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]; 
} 
+0

Exactamente lo mismo. ¿Enviaste algún informe de error a Apple? ¿O tienes una mejor manera de resolverlo? – onevcat

3

Prueba este compañero

[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; 


     } 
    }]; 
+0

dissmissViewControllerAnimated es obligatorio si usa Twitter, pero no si usa Facebook, ¡allí funciona sin él! – Sam

Cuestiones relacionadas