Twitter completionHandler成功冻结应用程序

Ben*_*her 11 twitter ios ios5

完成推文后TWTweetComposeViewController,我的应用锁定了.走出主屏幕并回来似乎解决了这个问题,时钟仍然响起,但没有触摸注册我的任何视图/控件.

在我的应用程序中思考一些奇怪的东西,我创建了一个新的实用程序 - 应用程序 - 模板项目,将其链接到w/Twitter.framework,并将信息UIButtonIBAction方法重新定义为:

- (IBAction)showInfo:(id)sender
{   
    TWTweetComposeViewController *twt = [[TWTweetComposeViewController alloc] init];
    [twt setInitialText:@"some garbage"];
    [twt addURL:[NSURL URLWithString:@"http://google.com"]];
    twt.completionHandler = ^(TWTweetComposeViewControllerResult r) { NSLog(@"it happened: %d",r); };
    [self presentViewController:twt animated:YES completion:NULL];
    [twt release];
}
Run Code Online (Sandbox Code Playgroud)

在取消之后(有趣地需要2次点击),可以通过点击"i"来恢复它,但是在提交之后,"i"在响应应用程序之前没有响应.

有人用过这个吗?还是我公然遗失了什么?

rad*_*six 24

这里的问题是你提出了一个模态视图控制器(twitter视图控制器是模态的); 但是,您的完成处理程序在完成时不会解除模态视图控制器.这使得Twitter控制器可以捕获屏幕上的所有触摸,从而阻止您的应用正常运行.

您需要确保添加[self dismissModalViewControllerAnimated:YES]; 到你的完成处理程序.

像这样的东西:

(IBAction)showInfo:(id)sender 
{   
    TWTweetComposeViewController *twt = [[TWTweetComposeViewController alloc] init];
    [twt setInitialText:@"some garbage"];
    [twt addURL:[NSURL URLWithString:@"http://google.com"]];
    twt.completionHandler = ^(TWTweetComposeViewControllerResult result) { 
      switch (result) {
        case TWTweetComposeViewControllerResultCancelled:                    
           break;

        case TWTweetComposeViewControllerResultDone:
           break;

        default:
           break;
      }
      [self dismissModalViewControllerAnimated:YES];
    };

    [self presentModalViewController:twt animated:YES];
Run Code Online (Sandbox Code Playgroud)

};