用于多对多关系的简单核心数据提取

问题描述 投票:1回答:2

考虑到狗和主人之间存在一对多关系,即

(Owner)
@NSManaged public var dogs: NSSet?

(Dog)
@NSManaged public var owners: NSSet?

我有一个返回狗的DogProvider类。默认情况下,它将返回所有Dogs。但是在给DogProvider一个所有者的情况下,如何在NSFetchedResultsController中仅返回该所有者的Dog?我知道下面的方法不起作用(Cannot convert value of type 'Owner?' to expected argument type '[Any]?'),但这是我的最新尝试。

let fetchRequest: NSFetchRequest<Dog> = Dog.fetchRequest() //return all dogs by default
if let owner = self.owner {
    fetchRequest.predicate = NSPredicate(format: "owner = %@", argumentArray: self.owner)
}
swift core-data nspredicate nsfetchedresultscontroller nsfetchrequest
2个回答
0
投票

正如@willeke在评论中所说,argumentArray:参数需要一个数组。但您的谓词也需要略有不同,因为这种关系是多对多的:


0
投票

您使用的API错误。 argumentArray用于多个占位符,其中数组中的项目数必须与占位符数匹配。例如]

let parameters = [foo, bar, baz]
fetchRequest.predicate = NSPredicate(format: "foo = %@ AND bar = %@ AND baz = %@", argumentArray: parameters)
© www.soinside.com 2019 - 2024. All rights reserved.