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 *

每当我尝试滚动时,它都会产生一个 indexoutofbounds 错误,这只是合乎逻辑的。如何处理空数组的情况?

编辑:

同样作为代码的一部分,我实现了以下

- (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

要解决此问题,您应该在数组为空时在方法中返回 1 而不是 0,如下例所示numberOfRowsInComponentUIPickerViewDataSource

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.myArray count] == 0 ? 1 : [self.myArray count];
}
于 2013-08-04T15:01:42.273 回答
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 回答