NSPredicate匹配财产

时间:2012-09-09 02:08:50

标签: objective-c core-data nspredicate nsfetchrequest

世界上我在这里做错了什么?沮丧得无法相信。

我有一个数组,其中包含具有属性的特定类型的对象。我们只是将该属性称为“数字”。它的类型为NSUInteger

我还有一个实体,其属性为“number”,类型为Integer 64

我正在尝试创建一个获取请求,该请求会找到我的核心数据存储中的所有对象存在于带有对象的另一个数组中。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"NOT (%@.number IN number)",someArrayWithObjects];
NSError *error = nil;
NSArray *notMatchingObjects = [context executeFetchRequest:fetchRequest error:&error];

这将返回一个nil数组。我知道我的本地商店中有数字的对象在我的其他数组中不存在。我做错了吗?

2 个答案:

答案 0 :(得分:1)

使用NSArrays符合键值编码的事实,并为您提供一个带valueForKey:的属性值数组(对于NSUInteger,它将它们包装在NSNumbers中)

NSArray *predicateInts = [someArrayWithObjects valueForKey:@"number"];
[NSPredicate predicateWithFormat:@"NOT (number IN %@)",predicateInts];

答案 1 :(得分:0)

首先,您必须创建一个NSNumber个对象数组,其中只包含您要排除的数字。

然后您可以使用以下获取请求:

[NSPredicate predicateWithFormat:@"NOT (number IN %@)", arrayWithNumbers];