iPhone - источник данных UITableView? - PullRequest
1 голос
/ 22 июня 2010

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

Это массив словарей.Итак, чтобы заполнить мою таблицу, я сделал что-то вроде

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

...

NSDictionary *umObject = (NSDictionary*)[listaDeObjectos objectAtIndex:indexPath.row];
NSString *oneName = [umObject objectForKey:@"name"];

[cell setText:oneName];

...

}

Это работает нормально, но сейчас я пытаюсь осуществить поиск по этой таблице.Я прочитал учебник, где парень использует метод поиска, подобный этому ...

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [searchedData removeAllObjects];// remove all data that belongs to previous search
    if([searchText isEqualToString:@""] || searchText==nil){
        [myTableView reloadData];
        searching = NO;
        return;
    }

    searching = YES;
    NSInteger counter = 0;
    for(NSString *name in dataSource)
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
        NSRange r = [name rangeOfString:searchText];
        if(r.location != NSNotFound)
                [searchedData addObject:name];
        counter++;
        [pool release];
    }
    [myTableView reloadData];
}

, как вы можете видеть, у него есть эта строка

for(NSString *name in dataSource)

, где name является записью из dataSource(??)

Звучит так, как будто таблица заполняется из какого-то массива, но, насколько я знаю, моя таблица не была заполнена непосредственно из массива, а вместо этого из значений, которые я извлек вПервая часть моего кода, одна за другой.

Я не уверен, понял ли я концепцию источника данных.

Я прочитал документы, но все еще не понимаю этого.

Что это за источник данных?У моего стола есть один?Если нет, то как мне искать в моей таблице?

Скажите, ребята, помогите?

спасибо

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

Я не знаю другого источника, но я думаю, что он использовал свой собственный массив для данных. Так что вы, вероятно, должны сделать что-то вроде

for (NSDictionary *dict in listaDeObjectos)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    NSString *oneName = [dict objectForKey:@"name"];

    NSRange r = [name rangeOfString:searchText];
    if(r.location != NSNotFound)
        [searchedData addObject:name];
    counter++;
    [pool release];
}

вместо.

2 голосов
/ 22 июня 2010

Ваш источник данных - это ваш класс, где у вас есть все эти UITableView связанные методы (tableView:cellForRowAtIndexPath: и т. Д.).Этот класс должен использовать протокол UITableViewDataSource.

Когда вы предоставляете данные для каждой ячейки, вы берете их из массива listaDeObjectos.При поиске вы хотите предоставить только несколько элементов из вашего массива, эти элементы должны соответствовать вашим критериям поиска.

Поэтому, когда вы не находитесь в «режиме поиска», вы должны предоставить данные из вашего массива (listaDeObjectos).Когда вы находитесь в «режиме поиска», вы должны предоставлять данные из отдельного массива, который должен содержать только определенные элементы, которые соответствуют вашим критериям поиска.UISearchBar вызывает метод searchBar:textDidChange:, в котором необходимо проверить каждый элемент в массиве listaDeObjectos, и, если этот элемент подходит для текста поиска, предоставленного UISearchBar, добавьте этот элемент в этот отдельный массив.Затем вы вызываете метод reloadData, который вызывает все методы табличного представления.Поэтому идея состоит в том, чтобы предоставить данные из «поискового массива», если вы осуществляете поиск, и из listaDeObjectos, если вы не осуществляете поиск.

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