我有这样的模特
class Group: NSManagedObject {
@NSManaged var id: Int
@NSManaged var headItems: NSOrderedSet
@NSManaged var chestItems: NSOrderedSet
}
class Item: NSManagedObject {
@NSManaged var id: Int
@NSManaged var dateCreate: NSDate
}
如何编写谓词以查找包含chestItems
或headItems
指定项目的所有群组?
这不起作用:
let fetchRequest = NSFetchRequest(entityName: "Group")
fetchRequest.predicate = NSPredicate(format: "(ANY headItems == %@) or (ANY chestItems == %@)", item,item)
let result = (self.moc.executeFetchRequest(fetchRequest, error: nil) as? [Group]) ?? [Group]()
更新: 问题在于更新关系中的引用,这段代码正在运行
答案 0 :(得分:1)
我相信你需要使用SUBQUERY而不是任何东西。试试这个:
NSPredicate(format: "SUBQUERY(headItems, $headItem, $headItem.id == %@).@count > 0 OR SUBQUERY(chestItems, $chestItem, $chestItem.id == %@).@count > 0", item.id, item.id )
您也可以在NSPredicates上引用this cheatsheet。
答案 1 :(得分:0)
如果可以的话,我会离开核心数据,这不是苹果公司最好的工作,而且我发现它真的很糟糕,很容易出现像你这样的问题。
我更喜欢DBAccess来保存数据,它非常易于使用,并且与Objective-C和Swift兼容。