UIPickerViewのデータソースは、UIPickerViewDataSourceプロトコルを実装するクラスである必要があります。ピッカービューの入力は、次の2つの方法で行われます。
– numberOfComponentsInPickerView:
– pickerView:numberOfRowsInComponent:
NSArrayは以下を使用してプロトコルを実装しないため:
pickerView.datasource=someArray;
...アレイがプロトコルを実装していないというエラーを生成します。
最初に行う必要があるのは、コントローラーが次のようなプロトコルを実装していることを宣言することです。
@interface MyControllerClass: UIViewController <UIPickerViewDataSource,UIPickerViewDelegate>
次に、次のようなプロトコルのメソッドを実装する必要があります。
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1; //or whatever
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return [self.tab_T count]; // assuming just one component
}
実際にコンポーネントにデータを入力するには、UIPickerViewDelegateメソッドが必要です。(データソースはデータを提供する必要があるようですが、何らかの理由で逆方向にデータを提供しているようです。)
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [self.tab_T objectAtIndex:row]; //assuming one component
}
ここでの重要なアイデアは、データソースメソッドとデリゲートメソッドを実装するオブジェクトが、ピッカーと実際にデータを保持するデータ構造との間のインターフェイスとして機能することです。この場合、単純な配列ですが、Core Data、SQL、またはURLからダウンロードされたものであれば何でもかまいません。
pickerviewは、データ構造を直接処理することはありません。相互作用を行うのは、常にデータソースとデリゲートメソッドを実装するオブジェクトです。