![](/img/trans.png)
[英]How to get the latest objects from NSFetchedResultsController with a limit?
[英]How to get unique objects from NSFetchedResultsController?
我有一个具有重复联系人对象的实体Contact。 例如:
|---------------------|------------------|---------------|
| Name | Index Value | Number |
|---------------------|------------------|---------------|
| Daniel Higgins | 4 | 12345 |
|---------------------|------------------|---------------|
| Daniel Higgins | 4 | 123456789 |
现在,我在这里使用NSFetchedResultsController获取联系人并将其用于UITableviewController。
在这里,我只想显示一个名称为Daniel Higgins的条目。 如何基于idexvalue从NSFetchedResultsController过滤出唯一对象。
您可以这样创建请求(其中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
这样就不可能获得其他属性,例如number,否则它们将再次变得不同,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)
或者改为按照您的建议使用Controller,从而利用其委托并在即将发生更改时得到通知:
let controller = NSFetchedResultsController(
fetchRequest: request,
managedObjectContext: context,
sectionNameKeyPath: nil, // just for demonstration: nil = dont split into section
cacheName: nil // and nil = dont cache
)
创建fetchResultsController请求对象时,对其应用谓词以根据所需名称过滤出条目。
然后,当您使用context.fetch(request)
获取对象时,如果有多个条目,则只需使用第一个即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.