2017-02-01 139 views
0

Crashlytics服務報告中的一些碰撞(約30墜毀/ 18的用戶爲1000屆)NSDateFormatter dateFromString崩潰

這裏我的代碼:

var brutDate: String = "" 
brutDate <- map["send_date"] 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 

date = dateFormatter.dateFromString(brutDate)! // here is the crash (this is line 42) 

系統崩潰日誌是:

Crashed: NSOperationQueue 0x170422a80 :: NSOperation 0x170257190 (QOS: UTILITY) 
0 AppName  0x100085f84 specialized SNotification.mapping(Map) ->() (SNotification.swift:42) 
1 AppName  0x100084ff4 SNotification.mapping(Map) ->() (SNotification.swift:29) 
2 AppName  0x100085a78 protocol witness for Mappable.mapping(Map) ->() in conformance SNotification (SNotification.swift:29) 

在這種情況下, brutDate值是2017-01-31 20:02:08

我不是能夠使應用程序崩潰一個我的手機...

編輯:我在法國和應用程序部署爲加拿大,有沒有Locale問題?

+1

任何感嘆號都可能導致應用程序崩潰。瞭解如何安全地處理選項。 – vadian

+0

爲什麼不使用,如果讓或警衛來處理可選的向下轉換.. ?? – Tuhin

+0

是的,我知道這是另一個問題。如果未設置日期變量,則日期將爲零。 –

回答

2

可能存在語言環境問題或設備問題。如果設備的24小時時間設置爲關閉,那麼格式化程序將使用該設備,並重寫您提供的格式字符串。通過將您的時間格式設置爲12小時,您可以在本地重現此操作。

爲了防止這種情況,使用en_US_POSIX區域設置的日期格式,這將使其使用您提供的格式不加修飾:

dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") 

這說明here

在任何情況下,如果無法從字符串中恢復,您仍然最好不要使用!以及記錄和錯誤,或者提供合理的默認值。

相關問題