Swift CoreDate按日期和时间获取存储为字符串和排序

时间:2017-08-18 09:41:53

标签: 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中做同样的事情

1 个答案:

答案 0 :(得分:1)

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