TWTweetComposeViewController不会在iPad模拟器上解散

时间:2012-03-14 13:58:06

标签: ios5 twitter modalviewcontroller

在我的应用程序中,我有一个操作表,其中一个按钮以模态方式打开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];
        }
    }
}

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

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

1 个答案:

答案 0 :(得分:5)

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

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

  

添加completionHandler块时   TWTweetComposeViewController,完成处理程序需要调用    - [UIViewController dismissModalViewControllerAnimated:],即使tweet作曲家的视图因取消或取消而自行解散   发送按钮。如果不这样做会导致触摸事件无法到达   产生推文作曲家的观点。

只是想我会添加我的工作方式,即使这不符合内存指南,这也是一种解决方法:

[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];
    });