2016-07-25 59 views
0

我有用户和移动两个实体。用户与手机有关系名称编号。 这里是我的代码NSPredicate query for relation ship

+(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

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

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

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

这里,ContactName是您的contactName的字段名称,number是您的phonenumber字段。过滤是您的最终结果数组。

或者你可以将这个谓词应用到你的NSFetchRequest请求,所以它会扣除你的一个步骤过滤数组。这会给你直接过滤数组。

希望这可能会帮助你。