iPhone SDK:如何在应用过滤器后恢复NSMutableArray数据集?

时间:2010-02-04 16:26:47

标签: iphone

我正在尝试编写一个简单的过滤机制,以便当用户键入过滤字符串时,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]; 

}

1 个答案:

答案 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