按日期顺序对数组进行排序会导致设备崩溃

时间:2016-10-03 15:58:20

标签: arrays swift sorting crash nsdate

我有一个存储不同日期的数组:

var Dates_Array = [String]()

然后我有一个将字符串转换为NSDate的扩展名:

    extension String{
    var StringToDate:NSDate {
        let df = NSDateFormatter()
        df.dateStyle = .LongStyle
        df.timeStyle = .NoStyle
        return (df.dateFromString(self))!
    }
}

这是对数组进行排序的代码:

self.Ordered_Dates_Array = self.Dates_Array.sort { ($0 ).StringToDate.compare(($1 ).StringToDate) == .OrderedAscending}

在模拟器中,所有这些代码都按预期工作。但是当我在设备上运行应用程序崩溃时,这是错误消息的图像:

当我注释掉对数组进行排序的代码时,一切都按预期工作。那么是什么导致我的应用程序在设备上崩溃而不是模拟器?

修改

这就是Dates_Array的样子:

[“2016年12月24日”,“2016年9月14日”,“2016年9月19日”,“2016年11月19日”]

我的设备时区是伦敦。语言=英语和日历=格里高利。

2 个答案:

答案 0 :(得分:1)

return (df.dateFromString(self))!替换为:

if let dateString = df.dateFromString(self) {
    return dateString
} else {
    //Handle situations where the string can't be formatted as date
    return "Can't convert to date"
}

现在您可以知道哪些字符串无法转换。

答案 1 :(得分:0)

所以问题是我的日期是在美国写的,但是我的设备上的我的区域设置为英国,它有不同的日期样式。谢谢@rmaddy的帮助。