2013-07-23 4 views
1

Мое приложение считывает данные из файла Plist и отображения данных в UITableViewПоиск в массиве (из списка свойств со словарями) с Fast перечислению или NSPredicate

мой PLIST Пример:

<array> 
<dict> 
     <key>name</key> 
     <string>One</string> 
     <key>value</key> 
     <string>1</string> 
</dict> 
<dict> 
     <key>name</key> 
     <string>Two</string> 
     <key>value</key> 
     <string>2</string> 
</dict> 
<dict> 
     <key>name</key> 
     <string>Three</string> 
     <key>value</key> 
     <string>3</string> 
</dict> 
<dict> 
     <key>name</key> 
     <string>Four</string> 
     <key>value</key> 
     <string>4</string> 
</dict> 
<dict> 
     <key>name</key> 
     <string>Five</string> 
     <key>value</key> 
     <string>5</string> 
</dict> 
<dict> 
     <key>name</key> 
     <string>Six</string> 
     <key>value</key> 
     <string>6</string> 
</dict> 
</array 

Все теперь работает хорошо. Все отображается в моем TableView с правильными подробными ячейками. Я показываю значение в detailTextLabel и имя в TextLabel.

if (isSearching==true) { 
    cell.textLabel.text = [searchArray objectAtIndex:indexPath.row]; 
//How to include the key "value" from this non-dictionary Array? 
    return cell; 
} 

cell.textLabel.text = [[mainArray objectAtIndex:indexPath.row] objectForKey:@"name"]; 
cell.detailTextLabel.text = [[mainArray objectAtIndex:indexPath.row] objectForKey:@"value"]; 

и numbersOfRowsInSection конечно:

if (isSearching) { 
    return [searchArray count]; 
} 
return [IDarray count]; 

Я использую это, чтобы получить массив из списка свойств:

NSMutableArray *mainArray = [[NSMutableArray alloc] initWithContentsOfFile:path-to-plist-file]; 

но я хочу добавить UISearchBar искать через мои данные (массив).

Я смотрел и читал учебники, но я не могу заставить его работать с Fast Enumeration или NSPredicate, больше альтернатив?

Потому что я читаю данные из plist со многими словарями?

до сих пор я испытал это без успеха:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
if (searchText.length==0) { 
    isSearching = false; 
} 

else { 
    isSearching=true; 
    searchArray = [[NSArray alloc]init]; 

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", searchText]; 
    searchArray = [mainArray filteredArrayUsingPredicate:pre]; 
} 
[tableView reloadData]; 
} 

Это покажет «никаких результатов» при поиске, а иногда это не приведет к краху.

Я также протестировал:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
if (searchText.length==0) { 
    isSearching = false; 
} 

else { 
    isSearching=true; 
    searchArray = [[NSArray alloc]init]; 

    for (NSString *str in mainArray) { 
     NSRange searchRange = [str rangeOfString:searchText options:NSCaseInsensitiveSearch]; 


     if (searchRange.location !=NSNotFound) { 
      [searchArray addObject:str]; 
     } 
} 
[tableView reloadData]; 
} 

не работает ...

Как я могу реализовать панель поиска для поиска в данных? и как я могу отобразить значение и имя в контроллере дисплея поиска?

ответ

1

У вас есть массив словарей в mainArray. Она не работает:

for (NSString *str in mainArray) 

попробовать так:

id mainArray = [[NSMutableArray alloc] initWithContentsOfFile:path-to-plist-file]; 
NSMutableArray *names = [mainArray valueForKey:@"name"]; 
NSMutableArray *values = [mainArray valueForKey:@"value"]; 

и ищет в необходимом массиве

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

  • Нет связанных вопросов^_^