【问题标题】:NSPredicate returning all objects instead of just 1NSPredicate 返回所有对象,而不仅仅是 1
【发布时间】:2014-08-15 17:15:55
【问题描述】:

这是我的关系模型。圆形>孔。 圆形可以有很多孔,孔只能有一个圆形。

我想从特定的 Round 中抓取一个 Hole 对象。本质上,我试图抓取一个属性等于“1”的 Hole 对象。这是我的代码。

    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext
    let frequest = NSFetchRequest(entityName: "Round") 
    var titleHoleNumEHVC:NSString = "1"
    frequest.predicate = NSPredicate(format: "ANY roundToHole.holeNum = %@", titleHoleNumEHVC)

    let myArray = context.executeFetchRequest(frequest, error: nil)

问题出在我的谓词上。谓词出于某种原因返回所有 HOLE,而不仅仅是属性值为 holeNum = 1 的 HOLE。

我在这里遗漏了什么吗?我只想获取holeNum属性等于'1'的单个HOLE对象。

【问题讨论】:

    标签: core-data swift nspredicate


    【解决方案1】:

    你的 NSFetchRequest frequest 应该关注“洞”,而不是“圆”:

    let frequest = NSFetchRequest(entityName: "Hole") 
    

    那么,您的谓词有两种可能的方式。

    1. 你可以根据 Round 的一些属性来设置你的谓词:

      frequest.predicate = NSPredicate(format: "holeNum == %@ && holeToRound.someRoundEntityProperty == %@", argumentArray:[titleHoleNumEHVC, someRoundEntityPropertyValue])
      

      ...其中holeToRound是roundToHole的相反关系,其中someRoundEntityProperty是Round的一个属性。

    2. 如果你已经知道与你的 NSFetchRequest 相关的 Round managedObject,你可以像这样设置你的谓词:

      frequest.predicate = NSPredicate(format: "holeNum = %@ && holeToRound == %@", argumentArray:[titleHoleNumEHVC, someRoundObject])
      

      ...其中 someRoundObject 是您关心的 Round managedObject。

    【讨论】:

    • 哇...我爱你。我已经为此工作了几天,无法弄清楚。也感谢您对您的回答好心!!问题:为什么不允许我使用“Round”作为我的实体来访问特定的多对多对象?这是不允许的吗?
    • 当然,您可以使用您首先设置的谓词获取 Round managedObjects。但是:您的模型是否总是为任何圆形对象提供一个孔 1?如果是这样,那么您首先执行的操作将始终返回您的所有 Round managedObjects。
    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 2021-05-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多