ios - Swift 核心数据按日期和时间获取存储为字符串和排序

标签 ios swift core-data nsfetchrequest nssortdescriptor

在 CoreDate 表中,我将日期和时间存储为以下格式的字符串 并且我有一个特定的理由将其存储为一个字符串。

static let DateFmtVal = "dd-MM-yyyy";
static let TimeFmtVal = "hh:mm a";

现在在获取时我想通过将字符串转换为日期和时间来排序并排序以显示在 TableView 中,所以较新的行排在最前面

let DateSortVar = NSSortDescriptor(key: DateCol, ascending: false)
let TimeSortVar = NSSortDescriptor(key: TimeCol, ascending: false)
fetchedResultsController.fetchRequest.sortDescriptors = [DateSortVar, TimeSortVar]

在 Android 中,使用 SQLite 我得到的解决方案是:

SqlQryVar = "SELECT * FROM " + NamTblVal +
                        " ORDER BY STRFTIME('%d-%m-%Y %h:%i'," + DateCol + "|| ' ' ||" + TimeCol + ") DESC;";

请帮助我在 Swift 中做同样的事情

最佳答案

您可以将 Date 类型的计算属性添加到您的 CoreData 对象(在您的子类中),在那里进行转换并仅将其传递给排序描述符,您将获得与 Android 应用程序相同的行为,但要考虑考虑到 iOS 与 Android 的不同之处在于,在 iOS 中将字符串转换为日期很慢!!!并且分配多个 DateFormatters 是昂贵的(但您可以使用一个来进行所有转换)。因此,如果您没有很多日期,那么它可能适合您,无论如何,如果您想要获得正确排序的数据,那么您将不得不在某个时候进行转换。 另一种不转换为日期的解决方案是考虑对日期列使用其他格式,即“yyyy-mm-dd”,然后字符串排序将匹配日期。

关于ios - Swift 核心数据按日期和时间获取存储为字符串和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45753494/

相关文章:

ios - IO : ios app development option greyed out

ios - 向对象数组添加二级排序

ios - 状态恢复和托管对象崩溃

ios - UIPageControl View subview 中为 nil

iOs - 如何使用 url 将数据从小部件(今日扩展)传递到应用程序?

ios - 如何有效地使用 CoreData 在后台获取许多托管对象并在主线程上更新 UI?

swift - 快速请求核心数据的选定日期

ios - 如何使用 ZipKit 在 iOS 中压缩目录?

ios - 如何更改 UICollectionView 中的滚动方向?

ios - 我想在我的应用程序中使用分页。我有一个像这样的API :