Core data NSPredicate返回所有对象,而不是仅返回1个

Core data NSPredicate返回所有对象,而不是仅返回1个,core-data,swift,nspredicate,Core Data,Swift,Nspredicate,这是我的关系模型。圆>洞。 圆可以有许多孔,孔只能有一个圆 我想从一个特定的圆中抓取一个洞对象。本质上,我试图抓取一个属性等于“1”的洞对象。这是我的密码 let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate let context:NSManagedObjectContext = appDel.managedObjectContext let frequest

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

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

    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)
问题在于我的谓词。谓词出于某种原因返回所有孔,而不仅仅是属性值为holeNum=1的孔


我是不是遗漏了什么?我只想获取holeNum属性等于“1”的单孔对象。

您的NSFetchRequest
frequest
应该关注“孔”,而不是“圆”:

然后,您有两种可能的谓词方法

  • 您可以根据Round的某些属性设置谓词:

    frequest.predicate = NSPredicate(format: "holeNum == %@ && holeToRound.someRoundEntityProperty == %@", argumentArray:[titleHoleNumEHVC, someRoundEntityPropertyValue])
    
    。。。其中HoleToorn是roundToHole的相反关系,其中someRoundEntityProperty是Round的属性

  • 如果您已经知道与NSFetchRequest相关的Round managedObject,可以如下设置谓词:

    frequest.predicate = NSPredicate(format: "holeNum = %@ && holeToRound == %@", argumentArray:[titleHoleNumEHVC, someRoundObject])
    
    。。。其中someRoundObject是您关心的圆形managedObject


  • 哇…我爱你。这件事我已经研究了好几天了,还没弄明白。谢谢你对你的回答很友好!!问:为什么不允许我使用“Round”作为实体来访问特定的多个对象?这是不允许的吗?当然,您可以使用首先设置的谓词取回ManagedObject。但是:您的模型是否总是为任何圆形对象提供孔1?如果是这样的话,做你首先做的事情总是会返回你所有的管理对象。
    frequest.predicate = NSPredicate(format: "holeNum = %@ && holeToRound == %@", argumentArray:[titleHoleNumEHVC, someRoundObject])