我有User和Mobile两个实体。用户具有移动的关系名称编号。 这是我的代码
+(void)getUserPhoneNumber:(NSString*)searchString{
NSLog(@"search string is %@",searchString); // e.g. 8
NSManagedObjectContext *context = [[DataManager sharedManager]managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:NSStringFromClass([User class])];
NSError *error = nil;
NSArray *array = [context executeFetchRequest:request error:&error];
for (User * objUser in array) {
NSArray *arrayNumber = [(NSSet *)[objUser.numbers valueForKey:@"number"]allObjects];
NSLog(@"%@",arrayNumber);
// NSPredicate *predicate=[NSPredicate predicateWithFormat:@"SELF == %@",searchString];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"SELF == %@",searchString];
NSArray *filtered = [arrayNumber filteredArrayUsingPredicate:predicate];
if (filtered.count>0) {
NSLog(@"SEARCHED MOBILE NUMBER USER NAME ----> %@",objUser.fullname);
NSLog(@"SEARCH PHONE NUMBER IS----> %@",[[filtered objectAtIndex:0] valueForKey:@"number"]);
return;
}
}
}
我想在文字字段输入时获取数字,例如8。它应该返回名字和手机号码。 用户具有属性名称firstname。
答案 0 :(得分:0)
首先,您正在创建仅包含用户电话号码的NSSet数组,因此使用此数组无法过滤其名称与搜索字符串匹配的数字。
如果您想根据名称或/和电话号码中包含的搜索字符串搜索联系人,那么您可以将以下谓词应用于您请求的数组。
NSArray * filtered = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ContactName contains[c] %@ OR number contains[cd] %@",searchText,searchText]];
此处,ContactName是您的contactName的字段名称,而number是您的phonenumber字段。 filter是你的最终结果数组。
或者您可以将此谓词应用于您的NSFetchRequest请求,这样它将扣除您过滤数组的一步。这将为您提供直接过滤的数组。
希望这可能会对你有所帮助。