Завершение работы с TwitterHandler задерживает приложение на успех

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

В моем приложении должно произойти что-то странное, я создал новый проект-приложение-шаблон, связал его с Twitter.framework и переопределил метод info UIButton IBAction:

- (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" не реагирует до тех пор, пока не будет указано приложение.

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

Ответ 1

Проблема заключается в том, что вы представляете контроллер модального представления (контроллер просмотра твиттера является модальным); однако ваш обработчик завершения не увольняет контроллер модального представления, когда закончите. Это позволяет контроллеру twitter захватывать все штрихи на экране, чтобы ваше приложение не функционировало должным образом.

Вам нужно убедиться, что вы добавили [self rejectModalViewControllerAnimated: 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];

};

Ответ 2

В completionHandler отпустите twt.

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

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