2011-12-15 4 views
10

を送った私はUIAlertViewとデリゲートclickedButtonAtIndexを表示する方法である -ARCとUIAlertViewは:認識されていないセレクタはここでインスタンスに

UIAlertView *alert = 
    [[UIAlertView alloc] initWithTitle: @"title" 
           message: @"message" 
           delegate: self 
        cancelButtonTitle: @"Cancel" 
        otherButtonTitles: @"Continue", nil]; 

    [alert show]; 


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    //something 
} 

コードのこの作品は、ARCなしで完璧に動作します。しかし、ARCと、このエラーがスローされます - キャッチされない例外により「NSInvalidArgumentException」、理由にアプリを終了: -

デリゲートが投げている理由上の任意のアイデア「[__ NSCFType alertView:clickedButtonAtIndexは::]認識されていないセレクタはインスタンス0x859d790に送信されました」このエラー?

+1

デリゲート自体の割り当てが解除されています。そのオブジェクトをどのように作成して管理していますか? –

+1

@FirozeLafeer - このコードを呼び出すオブジェクト、つまりselfはARCによって解放されました。私はそれを財産にして、今はうまくいくようです。ありがとう:) – arank

答えて

13

代理人がdeallocされました。コードを再確認して、警告を表示しているオブジェクトが代理人として設定されているかどうかを確認します(つまり、アプリ内の何かがそれを強く参照しています)。

delegate: self cancelButtonTitle: @"No" otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)

を興味深いことに、それはあなたがアプリを初めて実行した場合にのみクラッシュ:あなたは最後のotherButtonTitlesパラメータの後に最後にnilを忘れてしまった場合、同様の

+0

これは確かに私の問題は、私は、私はまだメソッドを添付していたストーリーボードにボタンをコピーしていたので、私は実現したこのポストの後、viewController dealloc'd。したがって、呼び出されて正しく実行されていた私の他のメソッドは、clickedButtonAtIndex内のタスクを実行できませんでした。これが誰かを助けてくれることを願っています。 –

+0

また、UIAlertView用のCocoaPodを検索すると、UIAlertViewの使用を簡略化し、ビューコントローラでUIAlertViewDelegateを使用する必要性を排除するブロックベースの追加が多数見つかります。 –

0

にも発生することができます。その後、それはうまく動作します。

関連する問題