如何从NSFetchedResultsController获取唯一对象?

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

我有一个实体联系人,它有重复的联系对象。例如:

|---------------------|------------------|---------------|
|     Name            |    Index Value   |   Number      |
|---------------------|------------------|---------------|
|  Daniel Higgins     |         4        |    12345      |
|---------------------|------------------|---------------|
|  Daniel Higgins     |         4        |    123456789  |

现在我在这里使用NSFetchedResultsController获取联系人并将其用于UITableviewController。

在这里,我想只显示名字Daniel Higgins的一个条目。如何根据idexvalue从NSFetchedResultsController中过滤掉唯一对象。

ios swift core-data nsfetchedresultscontroller
2个回答
0
投票

创建fetchResultsController请求对象时,对其应用谓词以根据所需名称过滤输入条目。

然后,当你使用context.fetch(request)获取对象时,如果有多个条目,你可以简单地使用第一个。


0
投票

您可以像这样创建您的请求(其中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
    )
© www.soinside.com 2019 - 2024. All rights reserved.