我有一个实体Contact,它有重复的联系对象。 例如:
|---------------------|------------------|---------------|
| Name | Index Value | Number |
|---------------------|------------------|---------------|
| Daniel Higgins | 4 | 12345 |
|---------------------|------------------|---------------|
| Daniel Higgins | 4 | 123456789 |
现在我在这里使用NSFetchedResultsController获取联系人并将其用于UITableviewController。
在这里,我想只显示名字Daniel Higgins的一个条目。 如何根据idexvalue从NSFetchedResultsController中过滤掉唯一对象。
答案 0 :(得分:1)
您可以像这样创建您的请求(其中ContactResult
是您从核心数据生成的类):
let request = NSFetchRequest<ContactResult>(entityName: "contacts")
request.propertiesToFetch = ["name"] // an array of properties between which should be distinguished
request.returnsDistinctResults = true // dont do duplicates
这样就不可能获得像数字这样的其他属性,否则它们会再次出现,Daniel Higgins会弹出两次
再次。
如果这实际上是你想要的(得到名字和至少一个数字(不关心哪个)),那么你也可以使用group by
:
let request = NSFetchRequest<ContactResult>(entityName: "contacts")
request.propertiesToGroupBy = ["name"] // an array of properties between which should be grouped if there are duplicates
警告:如果有多个数字被选中,可能不一致!
然而,您可以直接获取Mehul Parmar建议的结果:
context.fetch(request)
或者改为使用您建议的控制器,因此使用其代理并收到即将发生的更改的通知:
let controller = NSFetchedResultsController(
fetchRequest: request,
managedObjectContext: context,
sectionNameKeyPath: nil, // just for demonstration: nil = dont split into section
cacheName: nil // and nil = dont cache
)
答案 1 :(得分:0)
创建fetchResultsController请求对象时,对其应用谓词以根据所需名称过滤掉条目。
然后,当您使用context.fetch(request)
获取对象时,如果有多个条目,您只需使用第一个。