核心数据NSPredicate来过滤结果

时间:2010-03-16 16:23:16

标签: iphone core-data nspredicate nsmanagedobject

我有一个包含bID和pID的NSManagedObject。在NSManagedObjects集合中,我只想要返回一个子集,并且我很难找到正确的NSPredicate或者从Core Data获得我需要的方法。

这是我的完整清单:

出价pid
41 0
42 41
43 0
44 0
47 41
48 0
49 0
50 43

上面有亲子关系。

规则:

如果记录的PID = 0,则表示该记录是父记录。 如果记录的PID!= 0,那么该记录的PID指的是它的父记录的BID。

示例:

1)BID = 41是父记录。为什么?因为记录BID = 42和记录BID = 47的PID值为41,这意味着它们是PID记录的子节点 2)BID = 42具有BID = 41的父记录 3)BID = 43是父记录 4)BID = 44是父记录 5)BID = 47具有BID = 41的父记录,因为其PID = 41.参见上面的#1 6)BID = 48是父记录 7)BID = 49是父记录 8)BID = 50是子记录,其父记录的BID = 43。

看模式?

现在,基本上,我只想获取以下行:

出价pid
44 0
47 41
48 0
49 0
50 43

BID = 41,BID = 48,BID = 49都应返回,因为没有PID等于其BID的记录。

应返回BID = 47,因为它是PID = 41的最新子项 应返回BID = 50,因为它是PID = 43的最新子项。

希望这有助于解释它。

1 个答案:

答案 0 :(得分:0)

哦,这很简单,您只需要设置出价谓词> = 43。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"bid >= %@", [NSNumber numberWithInt:43]];

我想也许你的NSNumber存在问题,因为Core Data在NSNumber下保存了很多类型,包括:int,BOOL等...... See here