核心数据查找包含在列表项中的对象

时间:2015-07-17 13:20:24

标签: ios swift core-data

我有这样的模特

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
}

如何编写谓词以查找包含chestItemsheadItems指定项目的所有群组?

这不起作用:

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]()

更新: 问题在于更新关系中的引用,这段代码正在运行

2 个答案:

答案 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兼容。

http://www.db-access.org/