0

UIPickerViewを正常に設定しましたが、データが最初に空の場合を処理するための最良の方法について疑問に思っています。現在の反復では、pickerdelegateに次のコードを使用します

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row                           forComponent:(NSInteger)component
{ 
    if ([flash_cards count])
    {
        return [[flash_cards allKeys] objectAtIndex:row];
    }

return @"";
}

どこ

 flash_cards = NSMutableDictionary *

スクロールしようとすると、論理的なインデックスアウトオブバウンズのエラーが発生します。空の配列の場合をどのように処理しますか?

編集:

また、コードの一部として、次のように実装しました

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponen: (NSInteger)component
  {
     return [flash_cards count];

  }

  #pragma mark Picker Data Source Methods
  - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
  {
   return 1;
  }
4

2 に答える 2

0

UIPickerViewDataSourceメソッドも実装する必要があります。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

これらのメソッドの戻り値を導出するには、引き続きflash_cards(または)を使用できます。[flash_cards count]データが空の場合は、0を返し、後で-reloadAllComponentsデータが読み込まれたときにピッカービューを呼び出すことができます。

于 2012-11-20T23:23:36.560 に答える
0

この問題を解決するには、次の例のように、配列が空numberOfRowsInComponentの場合から メソッドで0ではなく1を返す必要があります。UIPickerViewDataSource

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.myArray count] == 0 ? 1 : [self.myArray count];
}
于 2013-08-04T15:01:42.273 に答える