0

このコードをコンパイルして iOS 6 用に実行しています。

SLComposeViewController *control = [SLComposeViewController composeViewControllerForServiceType:...];
[control setInitialText:...];
[control addURL:...];
[control setCompletionHandler:^(SLComposeViewControllerResult result) {
    [self dismissViewControllerAnimated:YES completion:^{
        // do something
    }];
}];
[self presentViewController:control animated:YES completion:nil];

これが Twitter コントロールとして使用される場合は問題なく動作しますが、Facebook コントロールとして使用される場合、dismissViewController の完了ブロックは呼び出されません!!! (doSomething 部分は実行されません)。

これは、メインスレッドではなくコントローラーが閉じられていることに関係があると考えたので、それを次のように変更しました

dispatch_async(dispatch_get_main_queue(), ^{
        [self dismissViewControllerAnimated:YES completion:^{
             // do stuff... 
         }];
});

成功せずに。

これは iOS 6 のバグですか? どうすればそれを解決できますか?

4

1 に答える 1

0

これが解決策です:

[self dismissViewControllerAnimated:YES completion:nil];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.6 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    // do stuff
});

これはおそらく、dismissViewController API に関連する iOS 6 のバグです。

編集:より強力なソリューションを作成し、ここに投稿しました

于 2012-11-26T07:01:03.750 に答える