2014-02-14 2 views
0

Я пробовал весь день, но метод поиска Дисплей Делегат-методы не работают.Как реализовать поиск строки в словаре plist?

У меня есть табличное представление, которое загружает plist, и я пытаюсь реализовать функцию поиска.

Вот мой код

#import "TabelViewController.h" 
#import "Cell.h" 
@interface TabelViewController() 

@property (nonatomic,copy) NSDictionary *names; 
@property (nonatomic,copy) NSArray *keys; 
@property (nonatomic,copy) NSArray *FIOArray; 
@property (nonatomic,copy) NSMutableArray *filtredNames; 
@property (nonatomic,copy) UISearchDisplayController *searchController; 

@end 

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

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{ 

[filtredNames removeAllObjects]; 

if (searchString.length > 0) { 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", self.searchBar.text]; 


    for (NSString *key in keys){ 

     NSArray *matches = [names[key] filteredArrayUsingPredicate:predicate]; 


     [filtredNames addObjectsFromArray:matches]; 

    } 

    } 
    return YES; 
} 

Plist структурировать

<plist version="1.0"> 
      <dict> 
<key>А</key> 
<array> 
    <dict> 
     <key>ФИО</key> 
     <string>Аетров А.В.</string> 
     <key>Доклад</key> 
     <string>Доклад 5</string> 
     <key>Время</key> 
     <string>10:00-10:30</string> 
     <key>День</key> 
     <string>Четверг</string> 
    </dict> 
</array> 

ответ

0

этот код будет загрузить PLIST словарю:

NSString * filePath = [[NSBundle mainBundle] pathForResource:@"Your_actual_file_name" ofType:@"plist"]; 
names = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
NSMutableArray * allValues = [NSMutableArray new]; 

for (NSArray * array in dict.allValues) { 
    [allValues addObjectsFromArray:array]; 
} 

FIOArray = allValues; 

затем ваш метод поиска будет выглядеть так:

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{ 

[filtredNames removeAllObjects]; 

if (searchString.length > 0) { 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", searchString]; 
    NSArray *matches = [FIOArray filteredArrayUsingPredicate:predicate]; 

    [filtredNames addObjectsFromArray:matches]; 

    } 
return YES; 
} 
+0

Thx но это также доценка. Я думаю, что моя ошибка в этих строках 'NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "SELF содержит [поиск]% @", self.searchBar.text]; для (ключ NSString * в ключах) { NSArray * matches = [names [key] filterArrayUsingPredicate: predicate]; [filtredNames addObjectsFromArray: matches]; } ' –

+0

@ Анвар, просто скопируйте весь '- (BOOL) searchDisplayController:' метод из моего ответа и код, загружающий plist в словарь. его работа, я проверил его. Потому что в вашем случае и см. Код, где вы получаете значения для массива 'keys', так что если вы этого не сделаете - это не сработает! –

+0

Я сделал это с для (клавишей ключа NSString *) { FIOArray = [names [key] valueForKey: @ "ФИО"]; NSArray * matches = [FIOArray filterArrayUsingPredicate: предикат]; [filtredNames addObjectsFromArray: matches]; извините за ваше время –

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