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

あなたがしたいことは、Facebook ダイアログを表示する前に、ユーザーが Twitter の投稿を終了するまで待つことです。facebook ダイアログが twitter ダイアログの完了ハンドラに表示されるようにコーディングできます。

   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 メソッドを呼び出す必要があります。完了ハンドラーがメイン スレッドで呼び出されることが保証されていないため、メイン スレッドでコントローラーを破棄する必要があります。

ただし、UX の観点からすると、ユーザーが twitter と Facebook で同時に共有することを余儀なくされるのは非常に面倒です。おそらく、この共有を行うためのより良い方法はありますか?

于 2013-07-02T01:08:53.293 に答える
0

これを行うことはお勧めしません。しかし、あなたは使うことができますNSOperationQueue

于 2013-07-02T00:59:14.767 に答える