无法在真实设备上解析日期,在模拟器中工作

时间:2017-04-10 22:57:35

标签: ios iphone swift simulator

我有一个应用程序,如果我尝试在真实设备上运行此应用程序(iPhone 5S和6) - Xcode显示错误:

  

致命错误:在展开Optional值时意外发现nil   2017-04-11 00:43:58.724143 + 0200 APN [2153:475883]致命错误:在展开可选值时意外发现nil

有一段代码存在问题。但在模拟器中一切正常。

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"

但我想问你问题出在哪里?

1 个答案:

答案 0 :(得分:0)

这可能是您的转换器无法处理的奇怪时区问题。没有一些调试我不知道。

无论如何,我建议使用另一个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%确信有价值,(在这种情况下你不能因为你不喜欢我不知道幕后发生了什么,或者如果该值不存在,你的程序会崩溃。