NSPredicate 用于查询中的位置
Posted
技术标签:
【中文标题】NSPredicate 用于查询中的位置【英文标题】:NSPredicate for a where in query 【发布时间】:2013-04-11 07:40:49 【问题描述】:设置
有一个核心数据对象foo
与另一个核心数据对象“bar”具有多对多关系。这个bar
有一个barid
类型为int32
的属性。
我有一个由 NSNumbers 表示的整数的 NSArray(我们将其命名为 intlist
)。
我有一个 foo
对象。
问题
我需要知道有多少与此foo
实例相关的bar
对象具有包含在intlist
中的barid
。
我想我可以为此使用谓词。但是我的谓词应该有什么格式?在 SQL 中应该是 SELECT count(*) FROM fooBarLinkTable WHERE fooid = x AND barid IN intlist
,但我不知道如何将该语句转换为谓词。
【问题讨论】:
用字典打印你的“数组”......然后很容易写谓词 【参考方案1】:我相信你有一个反向关系 barfoo 并且 intlist
是 NSArray 或 NSNumber 对象的 NSSet 类型。如果是这样,请执行以下操作:
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"bar"];
[request setPredicate:[NSPredicate predicateWithFormat:@"barid IN %@ && ANY relationshipToFoos == %@", intlist, foo]];
NSError* error = nil;
NSUInteger count = [[self.fetchedResultsController managedObjectContext] countForFetchRequest:request error:&error];
【讨论】:
只应注意(因为从问题中不清楚)intlist
必须是 NSNumber 对象的 NSArray(或 NSSet)。 C 整数数组在谓词中不起作用。
是的,当然。我假设这个。感谢您的注意。更新了答案。
我已经投了赞成票,我会在星期三回到办公室进行测试时接受。 intlist
是一个 NSArray。我会将其编辑到问题中。以上是关于NSPredicate 用于查询中的位置的主要内容,如果未能解决你的问题,请参考以下文章