0

我有以下代码:

- (IBAction)shareButton
{
    if(self.isTwitter.on)
       [self shareTwitter];
    if(self.isFacebook.on)
        [self shareFacebook];
}

调用的方法分别工作。但是,如果我尝试将它们一起运行,则 Twitter 方法会运行,但随后会收到警告:

Warning: Attempt to present <SLFacebookComposeViewController: 0x9471720> on <ViewController: 0xa193f30> while a presentation is in progress!

有没有办法检测“演示正在进行中”(或者更确切地说,如果共享表已经呈现给用户)并等到它完成?

4

2 回答 2

2

您要做的是等到用户完成 twitter 帖子后,再显示 facebook 对话框。您可以对其进行编码,以便在 twitter 对话框的完成处理程序中显示 facebook 对话框:

   if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) //check if Twitter Account is linked
    {
      mySLComposerSheet = [[SLComposeViewController alloc] init]; //initiate the Social Controller
        mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; //Tell him with what social plattform to use it, e.g. facebook or twitter
                [mySLComposerSheet setInitialText:[NSString stringWithFormat:@"Test",mySLComposerSheet.serviceType]]; //the message you want to post
       [mySLComposerSheet addImage:yourimage]; //an image you could post

        [self presentViewController:mySLComposerSheet animated:YES completion:nil];
    }
    [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {

//  dismiss the Tweet Sheet
dispatch_async(dispatch_get_main_queue(), ^{
  [self dismissViewControllerAnimated:NO completion:^{
    [self shareFacebook];
  }];
});
    }];

编辑:您需要先关闭控制器,然后在关闭控制器后调用 facebook 方法。您需要在主线程上关闭控制器,因为不能保证在主线程上调用完成处理程序。

然而,从用户体验的角度来看,用户被迫同时分享到 twitter 和 Facebook 是相当麻烦的。也许有更好的方法来进行这种共享?

于 2013-07-02T01:08:53.293 回答
0

我不建议这样做。但是你可以使用NSOperationQueue.

于 2013-07-02T00:59:14.767 回答