2016-07-25 31 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請求,所以它會扣除你的一個步驟過濾數組。這會給你直接過濾數組。

希望這可能會幫助你。