2012-03-17 11 views
1

UIAlertViewのinitメソッドをオーバーライドしてカスタマイズしようとしていますが、次の警告が表示されますか? "メソッドディスパッチでのセンチネルがありません"。Objective-C - メソッドディスパッチでのセンチネルが見つかりませんでしたか?

この警告は何を意味し、どのように解決できますか?

- (id)initWithTitle:(NSString *)title 
      message:(NSString *)message 
      delegate:(id)delegate 
    cancelButtonTitle:(NSString *)cancelButtonTitle 
    otherButtonTitles:(NSString *)otherButtonTitles, ... 
{ 
    if (self = [super initWithTitle:title 
          message:message 
          delegate:delegate 
        cancelButtonTitle:cancelButtonTitle 
        otherButtonTitles:otherButtonTitles]) 
    { 
     // Customize alertView 
    } 

    return self; 
} 
+0

アラートにUITextFieldを追加しようとしていましたが、私のアプリを4.0デバイス以上で実行したいので、iOS 5で新しいAPIを使用したくありません。 – aryaxt

答えて

3

特に、UIAlertView documentationを見てみましょう:

サブクラスノート

をUIAlertViewクラスはそのままで、サブクラス化をサポートしていない使用することを意図しています。このクラスのビュー階層はプライベートであり、変更することはできません。

これは、initWithTitleメソッドをオーバーライドすることが有用ではないことを意味します。別のアプローチを試す必要があります。たとえば、人々が代替案を提案できるようにするために何を達成しようとしているのかを共有する場合などです(カテゴリを使用するなど)。

0

UIAlertViewをサブクラス化できないためです。 docsから: そのままとサブクラス化をサポートしていません

サブクラスノート

UIAlertViewクラスが使用されることを意図しています。このクラスのビュー階層は プライベートであり、変更することはできません。

6

この問題は、initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:であると思われます。つまり、最後のパラメータの後に任意の数の引数をとります。あなたは基本クラスのメソッドを呼び出すと、次の2つの問題を抱えている:あなたは、あなたのバージョンの呼び出し元が供給することを、一緒にすべての引数を渡していない

  • 、および
  • あなたは最後の後の最終nilを渡していません引数(私は、コンパイラが不平を言っていると思います)。

すでに述べたように、UIAlertViewはサブクラス化されていません。別のアプローチを試すことを検討してください(便利なコンストラクタ関数/メソッドを代わりに使用してください)。

1

variadicメソッド呼び出しの最後にnil(センチネル)を入れていないため、警告です。しかし、とにかく、バリデーショナルメソッドをオーバーライドするのは不運です。詳細については、this questionを参照してください。

関連する問題