如何使用NSPredicate与数组包含Contact对象

时间:2014-04-17 11:44:43

标签: ios uitableview nspredicate segue

经过充分研究后,我找不到解决问题的方法。 我有一个tableview,其中包含Contact的对象。这个联系人有姓名,移动,街道......

我的问题是:
当我进行搜索时,我想搜索联系人的姓名。目前我正在研究字符串值

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@",searchText];

它完美无缺,但现在,我不会以联系人的名义进行研究。我该怎么办?

我说的时候:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@",searchText];


我有一个错误:

erminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x8d76100> valueForUndefinedKey:]: <br/><br/>this class is not key value coding-compliant for the key name.' .



在我班上联系我:

@property NSString * name;
@property NSString * display_name;
@property NSString * phone;
@property NSString * mobile;

有人可以一步一步地讲述如何使用包含ojetcs的nsmutablearray进行研究?

3 个答案:

答案 0 :(得分:2)

试试这个

 NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@ OR display_name contains[cd] OR phone contains[cd] OR mobile contains[cd]", searchText];

答案 1 :(得分:2)

对阵列使用谓词

NSArray和NSMutableArray提供了过滤数组内容的方法。 NSArray提供filteredArrayUsingPredicate:它返回一个新数组,其中包含接收器中与指定谓词匹配的对象。 NSMutableArray提供filterUsingPredicate:它根据指定的谓词计算接收者的内容,只留下匹配的对象。

NSMutableArray *array =
    [NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa", nil];

NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] 'a'"];
NSArray *beginWithB = [array filteredArrayUsingPredicate:bPredicate];
// beginWithB contains { @"Adam" }.

NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'e'"];
[array filterUsingPredicate:sPredicate];
// array now contains { @"Nick", @"Ben", @"Melissa" }

如果您使用Core Data框架,则数组方法提供了一种有效的方法来过滤现有的对象数组,而不需要进行提取 - 需要往返持久性数据存储。

此处LINK详细信息

答案 2 :(得分:1)

如果你尝试会发生什么:

 NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"name == %@", searchText];
 NSArray *temp = [YOUR_ARRAY filteredArrayUsingPredicate:filterPredicate]; ?

修改

试试这个:

NSMutableArray *searchResults = [[NSMutableArray alloc] init];

[YOUR_ARRAY enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    Contact *contact = obj;

    if ([[contact name] isEqualToString:searchText])
        [searchResults addObject:contact];
}];

//The search results array should now contain the matching items:
NSLog(@"Search Results:%@", searchResults);