【问题标题】:How to group Core Data objects as the data source for a UITableView如何将核心数据对象分组为 UITableView 的数据源
【发布时间】:2020-12-28 14:23:41
【问题描述】:

在 Core Data 中,我有大量的“City”对象,每个对象都有一个“country”属性。

我需要一个单独的屏幕来列出 UITableView 中的国家,而不是一个很长的可滚动城市列表。然后用户选择一个国家并被带到一个新屏幕,其中包含该国家的城市。

注意:这是针对游戏的,因此 UITableView 数据源绑定到 SKScene,但我认为这不会有任何区别,因为它适用于其他屏幕。

我已经找到了显示特定国家/地区城市的详细信息屏幕,并且在使用硬编码数据进行测试时效果很好。

我使用的是 Swift 5,所以我的数据调用是这样的:

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "City")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
fetchRequest.predicate = NSPredicate(format: "country = %@", country)
try fetchedResultsController.performFetch()

但是对于另一个屏幕,我不知道如何“分组”国家,这是每个城市的属性,并使分组成为另一个屏幕上 UITableView 的数据源。

a) 我可以创建一个 Country 数组,但是如何让 fetchedResultsController 将 Country 数据返回给 UITableView?

b) 或者,是否可以在 fetchedResultsController 中对对象进行分组或过滤?

c) 或者,是否可以在 fetch 请求中进行类似 SQL 的分组?

谢谢

【问题讨论】:

标签: ios swift uitableview


【解决方案1】:

感谢@Larme 提供https://developer.apple.com/documentation/coredata/nsfetchrequest/1506191-propertiestogroupby 的链接

因此,要使其正常工作,需要使用 NSDictionary 定义结果容器。

var fetchedResultsController: NSFetchedResultsController<NSDictionary>!

fetchRequest 需要设置为分组并获取特定属性。

fetchRequest.propertiesToFetch = ["country"]
fetchRequest.propertiesToGroupBy = ["country"]
fetchRequest.resultType = .dictionaryResultType

然后在我们需要访问数据的方法中:

// cell data
let countryName = (fetchedResultsController.object(at: indexPath) as NSDictionary)["country"]!
cell.textLabel?.text = "\(countryName)"

感谢您为我指明正确的方向!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多