2016-11-14 49 views
1

我使用Realm将所有数据存储在我的应用程序中。NSpredicate每个父项的一个子项目

我有一个商店项目,其中包含一个促销id和促销的列表,其中有一个父级属性是店铺的id。

我现在过滤所有现在可用的促销活动,并且我希望再添加一个过滤器,以便结果列表仅包含每个商店的促销活动。

我该如何完成过滤器,所以每个商店只能获得一项促销活动?

谢谢! //金

//编辑

let startDate: Double = currentDate.timeIntervalSince1970 
let endDate: Double = currentDate.timeIntervalSince1970 

let parentPredicate = NSPredicate(format: "") 
let datePredicate = NSPredicate(format: "SUBQUERY(dates, $d, $d.start <= \(startDate) && $d.end >= \(endDate))[email protected] > 0") 

self.realm?.objects(CSPromotions.self).filter(datePredicate).filter(parentPredicate) 
+0

你可以**和**运算符来连接多个过滤器。 'let predicate = NSPredicate(format:“color =%@ AND name BEGINSWITH%@”,“tan”,“B”)'。请按照文档https://realm.io/docs/swift/latest/#filtering – Poles

+0

我知道这一点,但我如何筛选出所有具有相同父级的促销,因此只有一项促销家长吗? 如何编写谓词查询? – Kimdv

+0

你能分享你的代码吗?我的意思是你试过的?如果没有代码,它很难给你提供建议。 – Poles

回答

1

境界斯威夫特currently doesn't natively support distinct,所以没有很好的方法来做到这一点。你可以做的是手动建立一个不同值的数组:

let shops = NSMutableSet() 
let promotions = self.realm?.objects(CSPromotions.self).filter(datePredicate).filter(parentPredicate).filter { 
    let id = $0.shop.id 
    if shops.contains(id) { 
     return false 
    } 
    shops.add(id) 
    return true 
} 
+0

非常感谢您的回答! :) – Kimdv

相关问题