按日期顺序对数组进行排序会导致设备崩溃
Sorting an array in date order causes crash on device
我有一个存储不同日期的数组:
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 { ([=12=] ).StringToDate.compare(( ).StringToDate) == .OrderedAscending}
在模拟器中,所有这些代码都按预期工作。但是当我 运行 它在设备上应用程序崩溃时,这是错误消息的图像:
当我注释掉对数组进行排序的代码时,一切都按预期工作。那么是什么导致我的应用程序在设备上崩溃而不是在模拟器上崩溃?
编辑:
这就是 Dates_Array 的样子:
["December 24, 2016", "September 14, 2016", "September 19, 2016", "November 19, 2016"]
我的设备时区是伦敦。语言 = 英语和日历 = 公历。
将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"
}
现在你可以知道哪些字符串不能转换了。
所以问题是我的日期写在美国,但我设备上的地区设置为英国,具有不同的日期样式。感谢@rmaddy 的帮助。
我有一个存储不同日期的数组:
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 { ([=12=] ).StringToDate.compare(( ).StringToDate) == .OrderedAscending}
在模拟器中,所有这些代码都按预期工作。但是当我 运行 它在设备上应用程序崩溃时,这是错误消息的图像:
当我注释掉对数组进行排序的代码时,一切都按预期工作。那么是什么导致我的应用程序在设备上崩溃而不是在模拟器上崩溃?
编辑:
这就是 Dates_Array 的样子:
["December 24, 2016", "September 14, 2016", "September 19, 2016", "November 19, 2016"]
我的设备时区是伦敦。语言 = 英语和日历 = 公历。
将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"
}
现在你可以知道哪些字符串不能转换了。
所以问题是我的日期写在美国,但我设备上的地区设置为英国,具有不同的日期样式。感谢@rmaddy 的帮助。