0

私は、写真や言葉 (またはその両方) を facebook と twitter の両方に投稿するプログラムをやっています。しかし、両方を同時に実行したいので、次のようにコードを書きました。

//POST TO FACEBOOK
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        slcvc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
        [slcvc addImage:bim];
        [slcvc setInitialText:tf.text];
        [self presentViewController:slcvc animated:YES completion:NULL];
    }
    else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook - not logged in!" message:@"You need to login (or sign up) to successfully post..." delegate:nil cancelButtonTitle:@"Too bad!" otherButtonTitles:nil];
        [alert show];
    }

//POST TO TWITTER
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
        slcvc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
        [slcvc addImage:bim];
        [slcvc setInitialText:tf.text];
        [self presentViewController:slcvc animated:YES completion:NULL];
    }
    else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Twitter - not logged in!" message:@"You need to login (or sign up) to successfully post..." delegate:nil cancelButtonTitle:@"Too bad!" otherButtonTitles:nil];
        [alert show];
    }

もちろん、これはすべて、既に「ファイル所有」されている IBAction 関数内にあります (slcvc は SLComposeViewController、bim は UIImage、tf.text は UITextfield tf のテキストです)。そして、私は以前にこのコードを投稿しましたが、それが個別に機能したことだけです。これを使用して Facebook と Twitter に同時に写真を投稿しようとすると、次のエラーが発生します。

Attempt to present <SLTwitterComposeViewController: 0xf6265e0> on <ViewController: 0x9476960> which is waiting for a delayed presention of <SLFacebookComposeViewController: 0x9432d70> to complete

(Facebookへの投稿は引き続き許可されていますが、Twitterへの投稿は許可されていません)

これは、最初の投稿 (この場合は Facebook の投稿) が完了すると、SLComposeViewController が再び自由に操作できるように登録するため、このようなことが起こると確信しています。ユーザーが最初の投稿を (Facebook に) 送信してから、Twitter への投稿を表示するのを何らかの方法で待機するように、2 番目の投稿 (Twitter の投稿) を作成する方法はありますか? 事前に助けや提案をしてくれた人に感謝します!!

4

2 に答える 2

0

次のことを試してみてください。

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [self presentViewController:fbViewController animated:YES completion:nil];
    }];
于 2014-10-29T12:23:28.387 に答える
0

SLComposeViewController の完了ハンドラーを使用する必要があります。これは、ユーザーが投稿を作成またはキャンセルした後に呼び出されます。

[slcvc setCompletionHandler:^(SLComposeViewControllerResult result) {
    //POST TO TWITTER
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
        slcvc2 = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
        [slcvc2 addImage:bim];
        [slcvc2 setInitialText:tf.text];
        [self presentViewController:slcvc animated:YES completion:NULL];
    }
    else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Twitter - not logged in!" message:@"You need to login (or sign up) to successfully post..." delegate:nil cancelButtonTitle:@"Too bad!" otherButtonTitles:nil];
        [alert show];
    }
}
于 2013-06-03T06:42:07.920 に答える