【问题标题】:NSPredicate: to-Many relationship with date iOSNSPredicate:与日期iOS的to-Many关系
【发布时间】:2014-09-25 08:01:14
【问题描述】:

我正在处理核心数据关系,遇到了一种复杂的情况。 我有两个实体,分别是 CustomersOrders

一位客户可以订购多件商品。所以,这是从客户到订单的多对多关系。

查询:获取一个月内未订购的所有客户。

使用核心数据获得结果的最佳方式是什么?


更新:

用这个谓词试过了:

NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"ANY custOrders.treatDate <= %@", endDate];

实际上它给我的结果是客户是否在一个月前订购了.. 如果它再次订购,那么它也会返回结果。 我只想要一个月以来没有订购的客户的结果.. !!!

【问题讨论】:

  • 假设您的意思是比获取 custOrders.treatData 超过一个月的所有客户更优化?
  • 这是有道理的,因为您需要找到 MAX 日期而不仅仅是任何日期

标签: ios objective-c core-data


【解决方案1】:

你的谓词不正确;搜索@"ANY custOrders.treatDate &lt;= %@" 将返回在提供的时间段内有ANY订单的客户。您要做的是找到最大订单日期小于一个月前的客户。

Core Data 的一个漂亮但鲜为人知的功能是您可以使用 max、min 和 sum 等基础集合运算符进行查询。

这应该可行:

NSPredicate *p = [NSPredicate predicateWithFormat:@"custOrders.@max.treatDate <= %@", endDate];

【讨论】:

  • 还有一个问题:如何获取本月生日的“客户”?核心数据以timeInterval的形式保存NSDate...!!!
  • 那么您需要找到月初和月底,并搜索该范围内的所有日期。或者,您可以将他们的生日保存为多个属性,月、日、年,然后您可以这样查询:)
【解决方案2】:

也许你可以使用反向谓词:

NSPredicate *notFilter = [NSCompoundPredicate notPredicateWithSubpredicate:filter];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多