【发布时间】:2011-01-05 11:25:14
【问题描述】:
我有四个 NSDictionaries,我想根据分段控件来填充选择器视图。 使用我拥有的代码,第一个分段控件/选择器视图工作正常,但是当我切换到第二个段时,选择器视图仅加载第二个字典的一部分,即它加载与第一个字典中计数的行数相同的行数。当我将分段控件更改为第三或第四段时,它会简单地崩溃并出现 sigabrt 错误,表明当仅存在 27 时它无法索引 item43。我怀疑这源于基于 upickerview 行和对象的 UItextfield 人口。我认为问题在于我设置数据源和委托的方式。
#pragma mark -
#pragma mark UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if ([wine selectedSegmentIndex] == 0)
{
return [robskeys objectAtIndex:row];
}
if ([wine selectedSegmentIndex] == 1)
{
return [esabskeys objectAtIndex:row];
}
if ([wine selectedSegmentIndex] == 2)
{
return [lebskeys objectAtIndex:row];
}
else if ([wine selectedSegmentIndex] == 3)
{
return [sbskeys objectAtIndex:row];
}
return @"Unknown title";
}
#pragma mark -
#pragma mark UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if ([wine selectedSegmentIndex] == 0)
{
return robskeys.count;
}
if ([wine selectedSegmentIndex] == 1)
{
return esabskeys.count;
}
if ([wine selectedSegmentIndex] == 2)
{
return lebskeys.count;
}
else if ([wine selectedSegmentIndex] == 3)
{
return sbskeys.count;
}
return 1;
}
#pragma mark -
任何帮助将不胜感激 谢谢
更新
在更改分段控件时使用以下内容。有没有人在 viewDidLoad 和这个 IBAction 中看到 alloc、init、release 相同的选择器视图中的任何问题。正如您可能已经猜到的那样,UItextfield winespec 将 coPicker 称为键盘而不是键盘。
-(IBAction)ValueChanged:(id)sender {
[winespec resignFirstResponder];
UIPickerView *coPicker = [[UIPickerView alloc] initWithFrame:CGRectZero];
coPicker.tag = kCountryPickerTag;
coPicker.delegate = self;
coPicker.dataSource = self;
[coPicker setShowsSelectionIndicator:YES];
winespec.inputView = countryPicker;
[winespec becomeFirstResponder];
[coPicker release];
}
【问题讨论】:
-
当你选择一个段时你正在执行什么代码?
-
我的猜测是,selectedSegmentIndex 值在某处被重置。
-
selectedSegementIndex 不会在任何地方重置
标签: iphone objective-c