2014-02-14 44 views
0

我嘗試了一整天,但搜索顯示委託方法的方法不起作用。如何實現在詞典plist中搜索字符串?

我有一個tableview加載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 

方法正確dosent工作。 我不知道如何從我的plist正確加載字典來實現搜索

-(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 contains [search]%@」,self.searchBar.text]; for(NSString * key in keys){ NSArray * matches = [names [key] filteredArrayUsingPredicate:predicate]; [filtredNames addObjectsFromArray:matches]; } ' –

+0

@Анвар,只是複製整個' - (布爾)searchDisplayController:'方法從我的答案,和代碼,也加載plist到字典了。它的工作,我檢查了它。因爲在你的情況,並看到代碼中'鍵'數組的值,所以如果你不這樣做 - 它不會工作! –

+0

我與 爲做到了(的NSString *中的鍵鍵){ FIOArray = [名稱[鍵] valueForKey:@ 「ФИО」]; 的NSArray *匹配= [FIOArray filteredArrayUsingPredicate:謂詞]; [filtredNames addObjectsFromArray:matches]; 對不起,你的時間 –