Программирование SearchBar в iPhone / iPad - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть такие данные ... (Все данные взяты из файла .plist ...)

Searching Array - (
        {
        FirstName = "Ramesh";
        LastName = "Bean";
        EmpCode = 1001;
    },
        {
        FirstName = "Rohan";
        LastName = "Rathor";
        EmpCode = 102;
    },
        {
        FirstName = "Priya";
        LastName = "Malhotra";
        EmpCode = 103;
    },
        {
        FirstName = "Mukesh";
        LastName = "Sen";
        EmpCode = 104;
    },
        {
        FirstName = "Priya";
        LastName = "Datta";
        EmpCode = 105;
    }

)

Я хочу реализовать поиск данных из этого массива на основе FirstName (ключ).

Я могу искать данные с помощью «FirstName (Key)»

но после фильтрации данных предположим, что я щелкнул Row (в данных), который отображается в TableView. Перейдите ко мне в New-Controller со всей информацией об этом конкретном сотруднике (например: FirstName, LastName, EmpCode).

Как я могу получить информацию?

Как я прошел через примеры кода поиска.

Вот мой код поиска ...

NSString *searchText = searchBar.text;
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    NSInteger TotalNoOfRecords=[self.SearchtableDataSource count];

    for (int i=0;i<TotalNoOfRecords;i++)
    {   NSDictionary *dictionary = [self.SearchtableDataSource objectAtIndex:i];
        NSArray *array = [dictionary objectForKey:@"FirstName"];


        [searchArray addObject:array];


    }
    for (NSString *sTemp in searchArray)
    {

        NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (titleResultsRange.length > 0)
        {
                [copyListOfItems addObject:sTemp];

        }
    }

Как я могу улучшить этот код? .... Пожалуйста, направьте меня ... [searchArray release]; searchArray = nil;

Как мы поддерживаем все «Ключи (FirstName, LastName, EmpCode)» в searchArray, пожалуйста, помогите мне? Спасибо ...

1 Ответ

0 голосов
/ 18 марта 2011

Использовать NSPredicate.

searchArray - это ваш список в NSArray. Создайте новый searchArray2 из searchArray, а затем отфильтруйте его, используя NSPredicate.

searchArray2 = [[NSMutableArray alloc] initWithArray:searchingArray copyItems:YES];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FirstName IN %@", SearchtableDataSource];
[searchingArray2 filterUsingPredicate:predicate];

Итак, ваш код должен выглядеть так:

tempArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1" ofType:@"plist"]];
searchArray = [tempArray valueForKey:@"FirstName"];
NSString *searchText = searchBar.text;
NSMutableArray *searchResults;

for (NSString *sTemp in searchArray)
{
    NSComparisonResult result = [searchText compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame)
            {
                [searchResults addObject:sTemp];
            }
searchArray2 = [[NSMutableArray alloc] initWithArray:searchArray copyItems:YES];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FirstName IN %@", searchResults];
[searchArray2 filterUsingPredicate:predicate];
}

Затем отправьте searchArray2 в NSLOG
NSLOG(@"searchArray2: %@", searchArray2)
и скажите, удовлетворены ли вы результатами:)

...