2012-09-27 11 views
14

Ich bin dabei, meine App für iOS6 und iPhone zu ändern, ich kann nicht herausfinden, warum, wenn ich posten von Twitter mit dem neuen sozialen Rahmen muss ich drücken 'Abbrechen' zweimal zum Schließen, jemand anderes hat dieses Problem oder eine Reparatur? Hier ist der Code für die Schaltfläche.Twitter Beitrag iOS6 'Cancel' Button Ausgabe

- (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

Haben Sie die completionHandler Einstellung versucht, bevor Sie den View-Controller zu präsentieren? – ale0xB

+0

Das hat den Job gemacht, danke Alex. –

+0

Schön, ich habe den Kommentar als Antwort gepostet (siehe unten). Prost! – ale0xB

Antwort

18

Wenn Ihr mit dem mySLComposerSheet dieses große Werk ...

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

Und dann müssen Sie daran denken, dies für einen Facebook SLComposeViewController zu tun automatische Entlassung selbst! rdar: 12440972 –

+0

Ja, vergessen zu erwähnen, dass. –

+0

@Steven, können Sie überprüfen, ob Apple dies ab heute behoben hat? Vor kurzem haben sie eine Menge Fehler behoben ... – Klaas

1

Posting Kommentar oben als Antwort:

Haben Sie versucht, die completionHandler Einstellung, bevor Sie den View-Controller zu präsentieren?

7

Das Problem gefunden. Es tritt nur auf, wenn ein Beendigungshandler zu TWTweetComposeViewController hinzugefügt wird. Wenn hinzugefügt, stellen Sie sicher, dass Sie anrufen:

[self entlassenModalViewControllerAnimated: YES];

+0

Siehe meine Antwort ... –

+0

Bitte verwenden Sie '[selbst ablehnenViewControllerAnimated: YES completion: nil];' anstelle von '[selbst entlassenModalViewControllerAnimated: YES];' –

9

Meine Erfahrung mit SLComposeViewController ist, dass Twitter und Weibo-Controller manuell werden müssen entlassen, während die Facebook-Controller besser benommen zu sein scheint.

Wenn ich ViewControllerAnimated nicht ablehne, tippt man auf die Schaltfläche "Senden", um den Tweet oder den Weibo-Beitrag zu senden, aber es bleibt eine scheinbar unsichtbare Ansicht über meine eigene Ansicht. Somit kann ich nicht mehr mit meiner App interagieren.

Ich weiß nicht, warum meine App so funktioniert ... Interessanterweise wird der completionHandler für cancel nur einmal aufgerufen. Das zweite Tippen beendet den View-Controller.

+ (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

Genau das gleiche. Haben Sie einen Fehlerbericht an Apple gesendet? Oder haben Sie eine bessere Lösung? – onevcat

3

Versuchen Sie, diese Kumpel

[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 ist erforderlich, wenn Sie Twitter verwenden, aber nicht, wenn Sie Facebook verwenden - da funktioniert es ohne! – Sam