2011-12-02 25 views
11

TWTweetComposeViewControllerの完了ツイートの後、私のアプリがロックアップします。ホーム画面に戻り、戻ってくるとこれを修正するように見えますが、時計はまだ目立ちますが、私のビュー/コントロールのいずれにも触れることはありません。Twitterの完了ハンドラーが成功したらアプリをフリーズする

これに奇妙な何かが私のアプリで起きなければなりません考えると、私はさんUIButton、新鮮なユーティリティアプリ - テンプレートプロジェクトを作っTwitter.framework/wが、それをリンクして、情報を再定義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'はアプリをバックグランドするまで応答しません。

これを成功裏に使用した人はいますか?それとも、私は大胆に何かを逃していますか?

+0

私はまったく同じことを見ています(キャンセルボタンでも同じ動作です)。完了ハンドラブロックを使用しないと、問題はなくなります。残念ながら、私は、アプリを吊ることなく完了ブロックを使用する方法を見つけることができないようだ...誰がこれが起こっていると、それを修正する方法を発見した場合に聞くことに興味があります。 – mattv123

+0

完了ブロックなしでTwitterコントローラーをどのように使用しますか? – radesix

+0

この質問は重複しています:http://stackoverflow.com/questions/9703389/twtweetcomposeviewcontroller-not-dismissing-on-ipad-simulator – orj

答えて

24

ここでの問題は、モーダルビューコントローラを表示していることです(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

また、補完ハンドラがどのスレッドで実行されるかは保証されていませんので、UIKitを使用している場合は(モーダルを破棄するビューコントローラ)あなたは**ディスパッチ_アシンクを使用してメインスレッド上で却下を確実にする必要があります –

+0

Ahhhh ...キャンセル/成功時にそれ自体解消されていたことがわかりました。 、ファントムタップキャプチャの後ろに残っている)明らかに、それは完全なハンドラなしでのみです。 –

+0

成功!私が知っていることが明らかになったと思われます。この動作には?(好奇心が強いのかどうかわかりません) –

0

completionHandlerには、twtがリリースされています。

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

アプリはフリーズしませんが、TWTweetComposeViewはまだすべてのタッチをキャッチしています。

+0

あなたのお勧めはできません。コンパイラのtwt = nil文の爆弾は "Variable is assignableではありません。 – radesix

関連する問題