使用 Swift 3 实现短路(单个数据多次)和过滤核心数据的最佳方法是啥?

Posted

技术标签:

【中文标题】使用 Swift 3 实现短路(单个数据多次)和过滤核心数据的最佳方法是啥?【英文标题】:What is the best way to implement shorting(Multiple time on single data) and filter with core data with Swift 3?使用 Swift 3 实现短路(单个数据多次)和过滤核心数据的最佳方法是什么? 【发布时间】:2017-06-05 07:12:58 【问题描述】:

[Core data 提供 NSFetchResultController 来帮助 UITableView。我想使用 Duration、Depart、Arrival、Price 和 Number of stops 以升序和降序对数据进行排序。 我通过提供排序描述符来获取请求来对数据进行排序。

我只想知道为每个排序创建 FetchResultController 的最佳方法是什么?

【问题讨论】:

为什么你不阅读:developer.apple.com/library/content/documentation/Cocoa/… 并使用 NSPredicate 是的,我可以使用谓词获取数据,但我想在获取后对数据进行排序(多次),所以我应该使用 FetchResultController 并更改每次排序的请求,还是需要创建获取的数据数组进行排序。哪个最好? 为什么在填充后你应该使用排序查询来填充:) 我有航班数据,包括出发、到达、停靠次数、价格和旅程持续时间。我需要从核心数据中获取数据。现在用户可以根据价格、出发等对数据进行排序(升序或降序)。 【参考方案1】:

是的,您应该在每次需要排序时创建一个新的 fetchedResultsController。 fetchedResultsController 跟踪更新、删除、插入和移动,因此如果您的数据在您获取后发生更改,fetchedResultsController 将告诉您如何更新视图。如果您只是进行获取然后再使用结果,则数据可能会过时。更糟糕的是,如果您在删除对象后访问它,您的应用程序将会崩溃。 fetchedResultsController 可以保护您免受这些问题的影响。

即使有大型数据集,每次用户希望排序时创建新的 fetchedResultsController 也没有任何问题。如果你发现你有性能问题,你应该处理它而不是预先优化。

【讨论】:

数据一旦获取就永远不会改变。对相同数据进行排序。 @乔恩罗斯 我仍然建议使用 fetchedResultsController。随着时间的推移,应用程序往往会发生变化并变得更加复杂。当你不认为我认为这是一个坏主意时,只要删除一个对象,就让自己崩溃。 谢谢@乔恩·罗斯

以上是关于使用 Swift 3 实现短路(单个数据多次)和过滤核心数据的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习欠拟合和过拟合

机器学习欠拟合和过拟合

1091.二维矩阵中的最短路径

Swift - RxSwift的使用详解32(UITableView的使用3:刷新表格数据)

编程之美最短路径

在 iOS 上使用 Swift 多次调用 Firebase 'Observe'