关系船的NSPredicate查询

时间:2016-07-25 10:05:10

标签: objective-c xcode core-data

我有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。

1 个答案:

答案 0 :(得分:0)

首先,您正在创建仅包含用户电话号码的NSSet数组,因此使用此数组无法过滤其名称与搜索字符串匹配的数字。

如果您想根据名称或/和电话号码中包含的搜索字符串搜索联系人,那么您可以将以下谓词应用于您请求的数组。

NSArray * filtered = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ContactName contains[c] %@ OR number contains[cd] %@",searchText,searchText]];

此处,ContactName是您的contactName的字段名称,而number是您的phonenumber字段。 filter是你的最终结果数组。

或者您可以将此谓词应用于您的NSFetchRequest请求,这样它将扣除您过滤数组的一步。这将为您提供直接过滤的数组。

希望这可能会对你有所帮助。