从不在集合中的核心数据中获取对象

tom*_*mas 26 iphone core-data objective-c nspredicate

我正在尝试从不在给定集合中的核心数据中获取对象,但我无法使其工作.

例如,假设我们有一个名为User的核心数据实体,它具有一些属性,如userName,familyName,givenName和active.给定一组表示一组用户名的字符串,我们可以轻松获取与该用户名列表对应的所有用户:

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User"
                                          inManagedObjectContext:moc];
[request setEntity:entity];

NSArray *userNames = [NSArray arrayWithObjects:@"user1", @"user2", @"user3", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName IN %@", userNames];
[request setPredicate:predicate];
NSArray *users = [moc executeFetchRequest:request error:nil];
Run Code Online (Sandbox Code Playgroud)

但是,我想获取该集的补充,即,我希望核心数据中的所有用户都没有在userNames数组中指定的用户名.有谁知道如何处理这个问题?我认为"NOT"在谓词中添加一个很简单(i.e., "userName NOT IN %@"),但是Xcode会抛出一个异常,说无法解析谓词格式.我还尝试使用可用于获取请求的谓词构建器而没有运气.文档也没有特别的帮助.建议?评论?感谢你的帮助 :)

jus*_*tin 60

为了找到不在你的数组中的对象,你所要做的就是这样:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (userName IN %@)", userNames];
Run Code Online (Sandbox Code Playgroud)

这应该返回所有对象的请求,而不是您指定的对象