【问题标题】:Core Data NSPredicate to filter resultsCore Data NSPredicate 过滤结果
【发布时间】:2010-03-16 16:23:16
【问题描述】:

我有一个包含 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 的最新子代。

希望这有助于更多地解释它。

【问题讨论】:

  • 哎呀,即使您修改了问题,也不清楚您想从数据中得到什么。尝试定义一个规则来获取您的数据,您将看到如何去做。根据您的解释,我没有看到任何规则来获取您想要的数据。你说你想得到bid=44,但后来你说41?

标签: iphone core-data nspredicate nsmanagedobject


【解决方案1】:

哦,这很简单,你只需要设置谓词bid >= 43。

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

我猜你的 NSNumber 可能有问题,因为 Core Data 在 NSNumber 下保存了许多类型,包括:int、BOOL 等...See here

【讨论】:

  • 好的,在我给你的数据集中,恰好是这种情况。但这不适用于更大的数据集。是亲子关系。 PID 是指另一个 BID。所以 41 的 BID 有 2 个孩子,BID=42 和 BID=47。在这种关系中,我只希望返回 BID=47。如果 PID 为 0,则也将其添加到子集中,只要没有 PID = BID 的行。
  • 我认为你应该多花点时间,通过清楚地编辑问题来准确描述你想要做什么,如果可能的话,给我们一些规则,否则答案将毫无用处。
  • 您可能还想在某处发布您的数据模型。
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多