我正在尝试编写一个简单的过滤机制,以便当用户键入过滤字符串时,UIPicker会过滤它的数据。我几乎都在工作。
这是我的过滤器代码,它可以正常工作。我的问题是,一旦我将过滤器应用于数据源,我该如何删除谓词并恢复原始数据集?我正在使用NSMutableArray作为我的数据源。
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] 'B'"];
[arrayCountryChoices filterUsingPredicate: predicate];
[pickerCountry reloadComponent:0];
提前谢谢。
修改
通过这种建议的方法,我收到了这个错误。 *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [UIView numberOfComponentsInPickerView:]:
我不确定为什么。这是我能想到的所有相关代码。我还检查了我在IB的联系。知道为什么吗?
//create data
arrayCountryChoices = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];
//copy the original array to searchable array
arraySearchResults = [arrayCountryChoices mutableCopy];
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
return [arraySearchResults count];
}
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [arraySearchResults objectAtIndex:row];
}
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
//grab the selected country
strUserChoice = [arraySearchResults objectAtIndex:row];
}
答案 0 :(得分:1)
为什么不在NSArray上保留原始数据,以及在NSMutableArray上填充UIPickerView的数据?
所以,当您需要原始数据时:
NSArray *myOriginalArray;
/*
Populate your array
*/
NSMutableArray *myMutableArray = [myOriginalArray mutableCopy];
/* Apply your filters on the mutable array
.
.
.
.
.
*/
/* When you need to restore the data you simply restore you original array */
myMutableArray = [myOriginalArray mutableCopy];
如果需要在应用程序的生命周期内修改原始数组,可以将其设置为可变数组。它会让您有机会将修改后的数组恢复到之前的内容。
干杯,
VFN