2010-02-04 2 views
0

Я пытаюсь написать простой механизм фильтра, который, когда пользователь вводит в строку фильтра, UIPicker фильтрует его данные. Я работаю почти.iPhone SDK: Как восстановить набор данных NSMutableArray после применения фильтра?

Это мой код фильтра, и он работает. Мой вопрос заключается в том, как только я применил фильтр к источнику данных, как я могу удалить предикат и восстановить исходный набор данных? Я использую 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

Почему вы не держать вас исходные данные на NSArray, и данные, которые населяет UIPickerView на NSMutableArray?

так, когда вы хотите, чтобы исходные данные вы хотели:


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]; 

Если вам нужно изменить исходный массив во время жизни приложения, вы можете установить его в качестве изменяемого массива. Это даст вам шанс, что все время, когда вам нужно, вы восстановите измененный массив до его предыдущего содержимого.

Cheers,
VFN

Смежные вопросы