【问题标题】:iPhones random crash on date formatter [duplicate]iPhone在日期格式化程序上随机崩溃[重复]
【发布时间】:2017-06-29 14:33:41
【问题描述】:

在我们的 iphone 应用程序中,我们解析从 api 调用获得的日期。日期正确返回并且是有效日期。现在只有在某些设备上,它会在解包 Optional 值时因意外发现 nil 的错误而崩溃。这是有问题的代码:

//formatDate(date: date, format: FullDateFormat)
class func formatDate(date: String, format: String)->String{
    if date.characters.count == 0 {return "" }
    let formatter = DateFormatter()
    formatter.dateFormat = Constants.FullDateFormat
    let nsDate = formatter.date(from: date)

    formatter.dateFormat = format
    return formatter.string(from: nsDate!)
}

nsDate 没有被格式化,因为它是 nil。

Constants.FullDateFormat 是一个静态字符串,定义为“M/d/yyyy h:mm:ss a”,因为日期总是采用这种格式

类函数的调用如下所示

let newDate = Helpers.formatDate(date: "9/27/2017 9:26:51 AM", format: "h:mm a")

某些设备会崩溃,而大多数设备不会。如果我们不使用类函数,则应用程序可以正常工作。我没有看到任何原因,所以如果有人知道为什么会发生这种情况以及可能的解决方案,请告诉我。

这可能是重复的,但没有出现在我执行的任何搜索中。感谢社区,他们指出了另一个类似的问题,答案已经在stackoverflow。如果这是重复的,我深表歉意。

【问题讨论】:

  • 你不应该使用nsDate的强制解包,你应该把它放在一个保护声明中。很可能在您的应用程序崩溃的设备上,其他一些设置(例如语言环境)不同,这些设置会导致解析日期出现问题,因为您没有指定 DateFormatter 使用的大量信息
  • 感谢 Martin R。我在搜索时没有看到这样的内容。我不介意删除它,但它可能对其他人有所帮助。我会编辑并指出您发布的问题。
  • 解决方案与建议的“Martin R”相同,但我理解 Micah 的困惑。

标签: ios swift


【解决方案1】:

这是语言环境的问题。 DateFormatter 取决于设备的当前位置设置,包括日期和时间。

您可以通过将其语言环境设置为en_US_POSIX 来确保格式化程序的语言环境始终是静态的:

formatter.locale = Locale(identifier: "en_US_POSIX")

查看Apple的链接了解更多详情:

https://developer.apple.com/documentation/foundation/nsdateformatter

【讨论】:

  • 这是修复。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2021-03-15
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多