将关系过滤器添加到 NSPredicate
Posted
技术标签:
【中文标题】将关系过滤器添加到 NSPredicate【英文标题】:Add a Relationship filter to NSPredicate 【发布时间】:2013-01-25 17:50:56 【问题描述】:我正在使用最新的 SDK 和 Xcode 4.5.2 开发一个 ios 应用程序。部署目标是 4.3。
我正在使用 Core Data 来访问这个实体:
我想过滤商店,但不知道怎么做(这是我的第一个 Core Data 项目)。
我知道我必须将NSFetchRequest
与NSPredicate
或NSExpression
一起使用。
我写这个 if 语句是为了告诉你我想要做什么:
if ((shop.acceptRate >= filterCriteria.acceptRate) &&
(shop.categoryId == filterCriteria.shopCategoryId) &&
([shop.productsId indexOfObject:filterCriteria.productCategoryId] != NSNotFound) &&
([latestLocation distanceFromLocation:shop.shopLocation] <= (filterCriteria.distance * 1000)))
[ ... ]
如何将NSFetchRequest
与NSPredicate
或NSExpression
一起使用?
我认为是这样的:
NSPredicate* predicate =
[NSPredicate predicateWithFormat:@"acceptRate >= %@ AND categoryId = %@", filterCriteria.acceptRate, filterCriteria.shopCategoryId];
但我不知道如何在NSPredicate
上写产品关系。
【问题讨论】:
【参考方案1】:根据您提供的信息,这样的事情应该可以工作:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"acceptRate >= %@ AND categoryId = %@ AND %@ IN products", filterCriteria.acceptRate, filterCriteria.shopCategoryId, filterCriteria.product];
其中filterCriteria.product
是Product
类型的NSManagedObject 实例
【讨论】:
以上是关于将关系过滤器添加到 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章