Как восстановить набор данных NSMutableArray после применения фильтра? - PullRequest
0 голосов
/ 04 февраля 2010

Я пытаюсь написать простой механизм фильтрации, чтобы при вводе пользователем строки фильтра 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 Ответ

1 голос
/ 05 февраля 2010

Почему бы вам не сохранить исходные данные в 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];

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

Ура,
VFN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...