【问题标题】:Using NSPredicate to filter Core Data entities without property equal to any of array property使用 NSPredicate 过滤没有属性等于任何数组属性的核心数据实体
【发布时间】:2015-02-20 01:55:51
【问题描述】:

我在 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")

【问题讨论】:

    标签: ios swift core-data nspredicate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      然后构建一个谓词,如果 Price 对象在上述数组中,则它们会过滤掉它们:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多