私はコードがやっているのを見るだけです:
tableview.delegate = self;
tableview.dataSource = self;
ただし、XCode 4.3 では警告が表示されます。キャストする必要がありid
ますか?キャストするのに適切なタイプですか? (したがって、次のようにする必要があります:)
tableview.delegate = (id) self;
tableview.dataSource = (id) self;
私はコードがやっているのを見るだけです:
tableview.delegate = self;
tableview.dataSource = self;
ただし、XCode 4.3 では警告が表示されます。キャストする必要がありid
ますか?キャストするのに適切なタイプですか? (したがって、次のようにする必要があります:)
tableview.delegate = (id) self;
tableview.dataSource = (id) self;
簡単な答え:id
コードが正しく設定されていれば、直接代入にキャストするべきではありません。
問題は、 にキャストして真のオブジェクト タイプを隠すことで、プロトコルへの準拠をごまかそうとしていること(id)
です。これは悪い習慣であり、避けるべきです! テーブル ビューは、そのdelegate
とdataSource
メンバーの両方が、呼び出す特定のメソッドを実装することを想定しています。プロトコル(Java のインターフェースに似ています) は、デリゲートが必要なすべてのメソッドを実装し、必要なすべてのメソッドを実装していないか、プロトコルをサポートするためにそれ自体を宣言していないオブジェクトを誤用しようとすると警告をスローするのに役立ちます。
発生している警告を正しく修正するには、クラス インターフェイス宣言 (通常はヘッダー内) を次のように変更します。
@interface MyObject : NSObject <UITableViewDelegate, UITableViewDataSource>
<> 内の項目は、クラスがサポートするプロトコルのリストを宣言します。
プロトコルの詳細については、https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html を参照してください。
あなたが直面している可能性が最も高い問題は、おそらくテーブルビューに必要なプロトコルを拡張していないことです。
.h ファイルに、次のコードとインターフェイス宣言を必ず追加してください。
@interface HomeScreenViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
次に、
yourTableName.delegate =self;
yourTableName.dataSource=self;
ストーリー ボードでこのコントロールを作成している場合は、いつでもテーブル ビューからファイルの所有者にコントロールをドラッグして、デリゲートとソースを選択できます。