是否可以创建NSFetchedResultsController以获取具有特定属性的不同值的所有实体?

时间:2017-07-07 12:53:14

标签: ios swift nsfetchedresultscontroller

假设我的Person实体具有属性:id, name, age

我有以下记录:

101, Katherine, 23
102, Madelaine, 23
103, Katherine, 27
104, Vicky, 18
105, Kirsten, 45
106, Vicky, 12

我需要按年龄排序的所有记录,不需要重复名称。

输出应为:

105, Kirsten, 45
103, Katherine, 27
102, Madelaine, 23
104, Vicky, 18

这是我创建NSFRC的方式:

    let context = NSManagedObjectContext.mr_default()
    let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
    let ageDescriptor = NSSortDescriptor(key: "age", ascending: false)

    fetchRequest.sortDescriptors = [ageDescriptor]

    fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
    fetchedResultsController.delegate = self

如何应用规则来获取所有人和只有一个(最老的)具有相同名称的人?

1 个答案:

答案 0 :(得分:0)

您可以使用NSFetchrequest中的属性returnsDistinctResultspropertiesToFetch仅返回获取请求的不同结果。在您的情况下,propertiesToFetch将是实体的名称。

您可以在此处找到更多信息: https://developer.apple.com/documentation/coredata/nsfetchrequest

就像示例代码一样。 (我正在做我的头脑,所以可能没有100%准确的语法确切):

let entity = NSEntityDescription.entity(forEntityName: "Person", in: context)

let entityProperties = entity.propertiesByName
let namePropertyDescription = entityProperties["name"]

fetchrequest.propertiesToFetch = [namePropertyDescription]
fetchrequest.returnsDistinctResults = true