我试图从不在给定集合中的核心数据中获取对象,但是我一直无法让它工作。从核心数据中获取对象不在集合中
例如,假设我们有一个名为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];
不过,我想获取该集合的补,即,我希望所有的核心数据中的用户没有在userNames数组中指定的用户名。有没有人有一个想法如何解决这个问题?我认为在谓词(i.e., "userName NOT IN %@")
中添加一个"NOT"
会很简单,但是Xcode会抛出一个异常,说明不能分析谓词格式。我也尝试使用可用于提取请求的谓词构建器,但没有运气。文档也不是特别有用。建议?注释?感谢您的帮助:)
够简单......谢谢,slev。 – tomas 2011-05-31 14:31:34
太棒了。我认为这是行不通的。但是那是因为我的数组中的数据来自另一个字段。谢谢。简单而有效。 – 2013-01-01 03:42:01
注意:这不适用于NSNumber变量,这可能是有道理的,但如果您将一个枚举包装在NSNumber中,这是一种遗憾。在这种情况下,使用'[NSPredicate predicateWithFormat:@“NOT(enumWrapper IN {%d,%d})”,enum1,enum2]'。 – 2013-03-18 00:43:18