如何使用“ IN”具有谓词的运算符

如何编写NSPredicate来获取与数组中的值匹配的行?例如:
[NSPredicate predicateWithFormat:@"UserName IN %@",UserIDArray];
如果
UserIDArray
包含用户ID,那么如何获取与此数组中的值匹配的用户名?     
已邀请:
让我从这个建议开始。核心数据不是SQL。实体不是表格。对象不是行。列不是属性/属性。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。 因为Core Data基于对象,所以当你进行提取时,你会得到一个对象数组。要查找特定值,您可以在这些对象中查询其各自属性的值。 假设您有以下实体:
User{
    userName:string
    userID:string
}
...并且想要找到其userName对应于userID字符串数组的所有用户。您将创建NSFetchRequest并将其实体设置为“User”。然后你会使用这样的谓词:
[NSPredicate predicateWithFormat:@"userID IN %@",arrayOfUserIDs];
fetch将返回使用
User
实体的属性名称键配置的NSManagedObjects(或子类)数组。要查找数组中每个托管对象的
userName
属性的值,您可以向对象询问其属性的值,如下所示:
NSString *aUserName=[aUserEntityObject valueForKey:@"userName"];
忘掉你对SQL或类似数据库系统的所有了解。核心数据并不是真正的数据库,因此试图用这些术语来思考它只会让你感到困惑。核心数据都是关于对象的。     
你的谓词很好,但是你的问题表明你并没有完全理解正在发生的事情。 当您执行获取请求时,您将获得对象,您不能只获得之前设置为
NSManagedObject
对象的值的一部分。 在你的情况下我会做的是检索与你的谓词匹配的对象,然后在结果
NSArray
上使用
valueForKey:
来获取用户名列表。 假设您有这样的实体:
User{
    name:string
    identifier:string
}
代码可以是:
NSArray *ids = @[@"a", @"b", @"c"];
NSManagedObjectContext *context = self.managedObjectContext;
NSFetchRequest *userRequest = [[NSFetchRequest alloc] init];
[userRequest setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:context]];
[elementsRequest setPredicate:[NSPredicate predicateWithFormat:@"identifier IN %@", ids]];

NSError *error;
NSArray *result = [context executeFetchRequest:userRequest error:&error];
if (result) {
    NSArray *names = [result valueForKey:@"_id"];
    // names is : @[@"the name of a", @"the name of b", @"the name of c"]
} else {
    // TREAT YOUR ERROR
}
    

要回复问题请先登录注册