ios slcomposeviewcontroller

ios - SLComposeViewController se despide de forma diferente para Facebook y Twitter?



(3)

Tengo un código para compartir en redes sociales que se ve así:

SLComposeViewController *composer = [SLComposeViewController composeViewControllerForServiceType:…]; [composer setInitialText:…]; [composer addURL:…]; [composer setCompletionHandler:^(SLComposeViewControllerResult result) { [someController dismissViewControllerAnimated:YES completion:^{ … // 1 }]; }]; [someController presentModalViewController:composer animated:YES];

El problema es que el código se comporta de manera diferente para Facebook y Twitter. Cuando el usuario confirma la pantalla de composición de Facebook, el compositor aparentemente se despide a sí mismo, porque el manejador de finalización marcado como 1 nunca se llama e incluso cuando dismissViewControllerAnimated: llamada de dismissViewControllerAnimated: todo funciona bien.

Por otro lado, cuando el usuario confirma la pantalla de composición de Twitter y no la descarto a mano, la pantalla de composición se desliza hacia fuera, pero la aplicación se queda bloqueada, como si un controlador todavía estuviera en primer plano. Cuando agrego la llamada dismissViewControllerAnimated: el problema desaparece y el controlador de finalización (1) se llama correctamente.

¿También notaste este comportamiento? ¿Estoy haciendo algo mal? Este es el actual iOS 6, código de muestra en GitHub . He reportado el problema a Apple (Radar # 12642889), todavía no hay reacción.


Aparentemente, el problema se solucionó en iOS 7, probado en la versión 7.0 beta 11A4449d.


Estoy haciendo algo similar en mi aplicación, y la única diferencia con su código es que estoy enviando un dismissModalViewControllerAnimated: control de controlador de dismissModalViewControllerAnimated: a dismissModalViewControllerAnimated: self lugar de enviarlo al controlador de vista.
Tanto el compositor de facebook como el de twitter se alejan.

Este es mi código:

SLComposeViewController *composer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; [composer setInitialText:text]; [composer setCompletionHandler:^(SLComposeViewControllerResult result) { ... [self dismissModalViewControllerAnimated:YES]; }]; [self presentModalViewController:composer animated:YES];


He confirmado tu problema con el comportamiento:

La versión de Twitter llama al controlador de finalización que configuró en el controlador de vista, y espera que llame a dismissViewController desde este controlador.

Sin embargo, la versión de Facebook llama a despideViewController antes de llamar a su controlador de finalización. Si luego llama usted mismo a despedirse a ControlController, no sucede nada y no recibe ninguna devolución de llamada de ningún bloque de finalización que pueda pasar a la desconexión del controlador de control.

Si omite la llamada a despideViewController, el uso de Twitter se bloquea, pero Facebook funciona.

Es un problema crear una solución si Apple va a corregir el comportamiento, ya que su solución se rompería. El principal problema es que el comportamiento no es el mismo entre las versiones de Weibo, Twitter y Facebook que comparten el mismo VC de redes sociales.

Así es como solucioné el problema:

SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:serviceType]; if(vc==nil) { [self.delegate imageSaveDidSucceed:NO]; } else { [vc addImage:self.image]; vc.completionHandler = ^(SLComposeViewControllerResult result) { DEBUG_LOG(@"social sharing completed"); if(self.presentedViewController) { DEBUG_LOG(@"presented vc is not nil"); [self dismissViewControllerAnimated:YES completion:^{ DEBUG_LOG(@"dismissed vc and calling imageSaveDidSucceed"); [self.delegate imageSaveDidSucceed:YES]; }]; } else { DEBUG_LOG(@"presented vc is nil"); [self.delegate imageSaveDidSucceed:YES]; } }; [self presentViewController:vc animated:YES completion: ^{DEBUG_LOG(@"vc was presented");}]; }