【问题标题】:NSPredicate query for relation shipNSPredicate 查询关系
【发布时间】:2016-07-25 10:05:09
【问题描述】:

我有 User 和 Mobile 两个实体。用户与 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。

【问题讨论】:

    标签: objective-c xcode core-data


    【解决方案1】:

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

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

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

    这里,ContactName 是您的contactName 的字段名称,而 number 是您的电话号码字段的名称。 filters 是你的最终结果数组。

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

    希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多