Завершение TwitterHandler замораживает приложение на успех - PullRequest
11 голосов
/ 03 декабря 2011

После завершения твита из TWTweetComposeViewController мое приложение блокируется. Выход на домашний экран и возвращение, кажется, исправят это, и часы все еще тикают, но никакие касания не регистрируются ни в одном из моих представлений / элементов управления.

Думая, что в моем приложении должно происходить что-то странное, я создал новый проект утилиты-app-template, связал его с * / 1004 * и переопределил метод UIButton * * info * к следующему:

- (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];
}

После отмены (которая занимает 2 нажатия, что интересно), ее можно восстановить, нажав «i», но после отправки «i» не отвечает до появления фона приложения.

Кто-нибудь успешно использовал это? Или я что-то явно упускаю?

Ответы [ 2 ]

24 голосов
/ 03 января 2012

Проблема здесь в том, что вы представляете модальный контроллер представления (контроллер представления 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];

};

0 голосов
/ 25 декабря 2011

В вашем completionHandler, выпуск twt.

twt.completionHandler = ^(TWTweetComposeViewControllerResult r) {
    NSLog(@"it happened: %d",r);
    [twt release]; // Unless using ARC
};

Приложение не зависает, но TWTweetComposeView все еще там, ловит все прикосновения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...