NSPredicate返回所有对象而不是1

时间:2014-08-15 17:15:55

标签: core-data swift nspredicate

这是我的关系模式。轮< --->>空穴。 圆形可以有很多孔,孔只能有一个圆形。

我想从特定回合中抓取一个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)

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

我在这里遗漏了什么吗?我只想抓住单个HOLE对象,其中holeNum属性等于'1'。

1 个答案:

答案 0 :(得分:0)

你的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托管对象。