TWTweetComposeViewController不会在iPad模拟器上解散

Lui*_*uiz 0 twitter modalviewcontroller ios5

在我的应用程序中,我有一个操作表,其中一个按钮以模态方式打开TWTweetComposeViewController.在iPhone模拟器上,推特作曲家的取消按钮工作正常,并解散视图.但是,在iPad模拟器上,取消按钮不起作用,并且推特作曲家视图仍保留在屏幕上.它甚至更奇怪,因为在按下取消按钮后,键盘缩回并且底层视图变为活动状态.它表现得好像视图已经被解散但它仍然存在.

用户按下操作按钮时使用的代码是:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
    if ([buttonTitle isEqualToString:@"Open in Safari"]){
        [[UIApplication sharedApplication] openURL:[self.webView.request URL]];
    }else if ([buttonTitle isEqualToString:@"Twitter"]){
        if ([TWTweetComposeViewController canSendTweet]){
            TWTweetComposeViewController *tweetSheet = [[TWTweetComposeViewController   alloc] init];
            [tweetSheet addURL:[self.webView.request URL]];
            tweetSheet.completionHandler = ^(TWTweetComposeViewControllerResult result){
                if (result == TWTweetComposeViewControllerResultCancelled){
                    [self dismissModalViewControllerAnimated:YES];
                }
            };
            [self presentModalViewController:tweetSheet animated:YES];
        }else {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Twitter error" message:@"You can't send a tweet right now, make sure your device has an internet connection and you have at least one Twitter account setup" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alertView show];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你对如何解决这个问题有任何想法,还是模拟器的错误?

PS:我的应用程序是一个标签栏应用程序,此代码从标签栏的一个视图控制器调用.

Mau*_*zio 5

我在实际设备上遇到同样的问题.事实证明这是Apple的SDK中的一个错误TWTweetComposeViewController.

请参阅OpenRadar上的错误报告:http://openradar.appspot.com/radar?id = 1484405 .

当completionHandler块添加到TWTweetComposeViewController,完成处理器需要调用 - [UIViewController中dismissModalViewControllerAnimated:],即使为鸣叫作曲家视图驳回本身与它取消或发送按钮.如果不这样做,会导致触摸事件无法到达产生推文编写器的视图.

只是想我会添加我正在做的事情,即使这没有正确遵循内存指南,这是一个解决方法:

[compose setCompletionHandler:^(TWTweetComposeViewControllerResult result){

    dispatch_async(dispatch_get_main_queue(), ^{

        if(self.delegate != nil)
        {
            if (result == TWTweetComposeViewControllerResultDone)
            {
                [self.delegate twitterOperation:TETwitterOperationTweet
                          completedSuccessfully:YES
                             withResponseString:@"Tweet Successful"];
            }
            else if(result == TWTweetComposeViewControllerResultCancelled)
            {
                [self.delegate twitterOperation:TETwitterOperationTweet
                          completedSuccessfully:NO
                             withResponseString:@"Tweet Cancelled"];
            }
        }

        // Dismiss per Apple's Twitter example
        [self.shownInViewController dismissViewControllerAnimated:YES 
                                                       completion:nil];

        // Yuck. But it's necessary.
        [compose release];
    });
Run Code Online (Sandbox Code Playgroud)