无法解析的实际设备的日期,工作在模拟器
问题描述:
我有一个应用程序,如果我尝试运行在真实设备上这个应用程序(iPhone 5S和6) - Xcode中显示错误:无法解析的实际设备的日期,工作在模拟器
fatal error: unexpectedly found nil while unwrapping an Optional value 2017-04-11 00:43:58.724143+0200 APN[2153:475883] fatal error: unexpectedly found nil while unwrapping an Optional value
有一块代码在哪里是问题。但在模拟器中一切正常。
let stringBefore = "Mon, 10 Apr 2017 11:39:24 +0000"
let startIndexDate = stringBefore.index(stringBefore.startIndex, offsetBy: 5)
let endIndexDate = stringBefore.index(stringBefore.endIndex, offsetBy: -15)
let rangeDate = startIndexDate..<endIndexDate
let stringAfter = stringBefore.substring(with: rangeDate)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
let date = dateFormatter.date(from: stringAfter)
dateFormatter.dateFormat = "dd.MM.yyyy"
let finish = dateFormatter.string(from: date!) // there is the problem but why in Simulator is ok?
我知道我可以写
dateFormat = "EEE, dd MMM yyyy hh:mm:ss +zzzz"
,但我想问你问题出在哪里?
答
这可能是您的转换器无法处理的奇怪时区问题。我不知道没有一些调试。
无论如何,我会建议使用另一个DateFormatter找到你的日期,而不是试图解析字符串:
let startingFormatter = DateFormatter()
startingFormatter.dateFormat = "EEE, dd MMM y HH:mm:ss Z"
let endingFormatter = DateFormatter()
endingFormatter.dateFormat = "dd.MM.yyyy"
let stringBefore = "Mon, 10 Apr 2017 11:39:24 +0000"
let actualDate = startingFormatter.date(from: stringBefore)
if let actualDate = actualDate {
let finish = endingFormatter.string(from: actualDate) //result is "10.04.2017"
}
else {
//handle error
}
此外,作为一般规则,力展开可选(date!
)是一个坏主意,除非你100%有信心有一个价值,(你不能在这种情况下,因为你不知道底下发生了什么),或者如果该值不存在,你的程序崩溃就可以。
打印'stringAfter'的值并查看它的值。它不能匹配'dd MMM yyyy'。 – rmaddy
由于您使用英文星期和月份名称的固定格式,并且希望避免讨厌的12/24小时格式问题,所以您需要将格式化程序的区域设置设置为'en_US_POSIX'。 – rmaddy
谢谢,它的工作! – spread7