我已經聯繫了每個聯繫人都是字典的數組。搜索NSArictionary對象的NSArray
每個聯繫人都有一個關鍵字「contact_type」,它是一個NSNumber。聯繫方式基本上代表了它的Facebook,LinkedIn或郵件聯繫等。 我有一個搜索數組,其中只包含NSNumber的contact_type's。
我想要的是使用我的搜索數組進行搜索的臨時數組。
我在使用NSPredicate創建搜索聯繫人數組時遇到了麻煩。有人能指導我如何做到嗎?
我已經聯繫了每個聯繫人都是字典的數組。搜索NSArictionary對象的NSArray
每個聯繫人都有一個關鍵字「contact_type」,它是一個NSNumber。聯繫方式基本上代表了它的Facebook,LinkedIn或郵件聯繫等。 我有一個搜索數組,其中只包含NSNumber的contact_type's。
我想要的是使用我的搜索數組進行搜索的臨時數組。
我在使用NSPredicate創建搜索聯繫人數組時遇到了麻煩。有人能指導我如何做到嗎?
NSArray *contacts = ...; //your array of NSDictionary objects
NSPredicate *filter = [NSPredicate predicateWithFormat:@"contact_type = 42"];
NSArray *filteredContacts = [contacts filteredArrayUsingPredicate:filter];
在此之後,filteredContacts
將只包含那些contact_type
爲42
接觸。
如果你需要搜索超過1種contact_type
,然後只需在謂語使用OR
:
filter = [NSPredicate predicateWithFormat:@"contact_type = 42 OR contact_type = 23"];
該解決方案的工作涼我。
// NSDictionary的格式
{
18=(
{
content="Great Avijit",
id=abc
}
),
13=(
{
content="Stack Overflow is cool",
id=abc
}
),
}
//步驟1
-(void)filterContentForSearchText:(NSString *)searchText
{
[self.filterResultArray removeAllObjects];
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"(content contains[cd] %@)", searchText];//from_user.name
//other
for (NSMutableDictionary *key in self.messageAll) {
NSArray *array=[self.messageAll objectForKey:key];
array=[array filteredArrayUsingPredicate:namePredicate];
if ([array count]==0) {
[self.filterResultArray removeObject:key];
}
else{
if ([self.filterResultArray containsObject:key]) {
}
else{
[self.filterResultArray addObject:key];
}
}
}
//Reload table view
[self.tableView reloadData];
}
//步驟2:numberOfRowsInSection
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.searchController.active && ![self.searchController.searchBar.text isEqualToString:@""]) {
return [self.filterResultArray count];
}else{
return [keyArray count];//keyArray hold all key of original dict
}
}
//步驟3:在方法的cellForRowAtIndexPath
NSString *key = [self.filterResultArray objectAtIndex:indexPath.row];
NSDictionary *dictionary = [[self.messageAll objectForKey:key] lastObject];//self.messageAll is original dict
戴夫上面的回答是完美的,我只是在這裏加入了我花了3個小時的夜間睡眠後所學到的。
當你試圖對數組喲需要使用謂詞是這樣的字典中搜索字符串值:
NSPredicate *filter = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"Title CONTAINS[cd] '%@' OR Description CONTAINS[cd] '%@'", searchText, searchText]];
不要忘了「」包裝你的價值觀,這是唯一的事情,花費我所有的時間。這裏是我最後的搜索功能
-(void)searchTerm : (NSString*)searchText {
if (searchText!=nil && searchText.length) {
NSPredicate *filter = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"Title CONTAINS[cd] '%@' OR Description CONTAINS[cd] '%@'", searchText, searchText]];
self.reasonDetailArray = [self.unfilteredReasonDetailArray filteredArrayUsingPredicate:filter];
}else{
self.reasonDetailArray = self.unfilteredReasonDetailArray;
}
[self.tableView reloadData];
}
嗨,謝謝你的回覆。但我正在尋找多個聯繫人類型的搜索....我找到了解決方案。 – Satyam 2011-05-01 04:23:40
@Satyam svv:我剛更新了我的答案。 – 2011-05-01 04:25:28
再次感謝。我發佈了與您的解決方案類似的解決方案,但我正在尋找更精確的解決方案。 – Satyam 2011-05-01 04:26:31