在 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/