使用NSPredicate过滤Core Data实体,其属性不等于任何数组属性

时间:2015-02-20 01:55:51

标签: ios swift core-data nspredicate

我在Core Data中有一组Price

    price1 = Price.newInManagedObjectContext(self.managedObjectContext!)
    price1.price = 1
    price1.size = 1
    price1.market = market1

    price2 = Price.newInManagedObjectContext(self.managedObjectContext!)
    price2.price = 2
    price2.size = 1
    price2.market = market1

    price3 = Price.newInManagedObjectContext(self.managedObjectContext!)
    price3.price = 3
    price3.size = 1
    price3.market = market1

    self.save()

然后我有一个更新集

    let p1 = PriceUpdate(price: 1, size: 2)
    let p2 = PriceUpdate(price: 4, size: 2)

    let updates = [p1, p2]

我想获取持久存储中没有价格等于任何更新价格的所有Price个对象。在price2price3的示例中,价格2和3不在更新中(1和4)

我尝试过这样的事情,但我不确定。

    let request = NSFetchRequest()
    request.entity = NSEntityDescription.entityForName("Price", inManagedObjectContext: self.managedObjectContext!)
    request.predicate = NSPredicate(format: "%K == %@.%K", "price", updates, "price")

2 个答案:

答案 0 :(得分:0)

我认为你可以再创建一个属性并在你的表属性中插入0 ...当你更新你的表而不是在新属性中插入1时所以当你从表中获取数据时,使用new属性进行查询在表中有1个......

答案 1 :(得分:0)

您没有提供PriceUpdate的详细信息,但我认为它是一个结构或类似物。首先构建一个只包含价格的数组:

let updatePrices = updates.map() { $0.price }

然后构建一个谓词,如果Price位于上面的数组中,则会过滤掉price个对象:

request.predicate = NSPredicate(format: "NOT %K IN %@", "price", updatePrices)