2014-02-04 5 views
1

Фактически я получаю данные от JSON webservice. Мне нужно искать данные из ячеек UITableView, используя uisearchdisplaycontroller.Как искать ячейку в UITableView из нескольких массивов в IOS

Я успешно передал данные в ячейки, используя NSMutablArray с несколькими массивами. Но теперь мне нужно искать данные из этого.

Мой массив:

[ 
{ 
    "name": "jhon", 
    "city": "chennai", 
} 
{ 
    "name": "Micle", 
    "city": "Newyork", 
} 
{ 
    "name": "Micle", 
    "city": "Washigton", 
} 
] 

Мои пользовательские ячейки в UITableView:

cell.P_name.text = [details objectForKey:@"name"]; 
cell.P_city.text = [details objectForKey:@"city"]; 

В поисках я пробовал:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    //-- Help to customize operations 
    searchResults = [[NSArray alloc]initWithArray:mainArray]; 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText]; 
    searchResults = [details filteredArrayUsingPredicate:resultPredicate]; 
    [tableView reloadData]; 
} 

Может кто-нибудь поможет решить мою проблему.

+0

Что вы пытались фильтровать исходный массив (вы не пытаетесь фильтровать ячейки или опросить ячейки)? 'NSPredicate'? – Wain

+0

@Wain: Теперь добавлен проверенный код в NSPredicate. – svmrajesh

ответ

3

Вы должны иметь 2 массива:

  1. Ваш главный магазин данных с вашего JSON (mainDataList)
  2. Ваш исходный массив данных, используемый для заполнения Ваше мнение (ые) стол (dataSourceList)

Первоначально:

self.dataSourceList = self.mainDataList; 

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

При поиске однако, вам нужно фильтровать содержимое dataSourceList и перезагрузить таблицу:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText]; 

    self.dataSourceList = [self.mainDataList filteredArrayUsingPredicate:resultPredicate]; 

    [tableView reloadData]; 
} 

Примечание: выше предикат только ищет name в ваших словарях ...

Теперь все методы просмотра таблиц используют только self.dataSourceList, и вы изменяете его содержимое на основе своего состояния. Вы код чистый и простой. Smile :-)

+0

Спасибо за ваш быстрый ответ.Я попробую это реализовать :-) – svmrajesh

+0

upvote для этого полезного ответа –

0

Я просто положить мою логику взять еще один изменяемый массив в .h имени файла _temArray

И добавить свой _mainArray(заполняется на Tableview) к вашему _temArray таких как,

[_temArray addObjectsFromArray:_mainArray]; 

Поиск по методу использования NSPredicate:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    //-- Help to customize operations 

    if([searchText length] > 0) 
    { 
     NSMutableArray *fileterMainArray = (NSMutableArray *)_temArray 
     NSPredicate *predicatePeople = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", searchText]; // here if you want to search by city then change "name" to "city" at pattern. 
     NSArray *filteredArray = [fileterMainArray filteredArrayUsingPredicate:predicatePeople]; 
     [_mainArray addObjectsFromArray:filteredArray]; 
    } 
    else 
     [_mainArray addObjectsFromArray:_temArray]; 

    [self.tblView reloadData]; // don't forget to reload Table data. 
} 
+1

Спасибо за быстрый ответ. я попробую это. – svmrajesh

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