2011-12-21 13 views
0

iOS 5で(ARC)を使用し始めましたが、頻繁に表示される問題があります。メソッドが見つからない、または宣言されていないことに関するコンパイラ警告

最初のケースは:選択してメソッドを宣言していないインスタンスメッセージの

レシーバタイプ 'のUIView'

[[cell viewWithTag:999] setTextColor:[UIColor blackColor]]; 

このラインは、問題の原因 'SETTEXTCOLOR:'。

第二の場合:

セレクタに対する既知インスタンスメソッド 'setForTheFirstTime:'

[delegate setForTheFirstTime:TRUE]; 

この行は問題を引き起こします。

デリゲートを使用すると、このような問題が発生します。

これら2つの問題を解決するには、performSelector:のような方法を使用する必要がありますか?

+2

これはARCと何が関係していますか? – JustSid

+1

どちらもARC関連の問題のようには見えません。 ARCを使用しているときに警告が開始されただけですか?初めてLLVMに切り替えたことはありますか? –

+0

あなたは 'viewWithTag:'呼び出しを 'UILabel *'か何かにキャストしようとしましたか? 'delegate'は' id 'とタイプされていますか?適切なメソッドを実装している場合と実装していない場合があるオブジェクトにメッセージを送信することに関する警告が表示されているようです。 –

答えて

2

正しいタイプとして 'delegate'を宣言するだけで、そのタイプのヘッダをインポートする必要があります。コンパイラは、デリゲートオブジェクトが 'setForTheFirstTime:'を理解しており、コンパイラがそのメソッドの宣言を必要としていることを知る必要があります。

viewWithTag:の最初のケースでは、コンパイラがその 'setTextColor:'メソッドについて知ることができるように、結果を正しいクラスにキャストする必要があります。このビューを仮定

はUILabelある:

[(UILabel*)[cell viewWithTag:999] setTextColor:[UIColor blackColor]];

0

viewWithTag方法はUIViewのオブジェクトを返します。したがって、setTextColorメソッドを呼び出すと、受信側はUIViewになり、UIView用のsetTextColorメソッドはありません。オブジェクトを正しいクラスにキャストする必要があります。ここであなたはUILabelが必要です。

関連する問題