2017-02-01 8 views
0

Crashlytics 서비스 보고서 일부 충돌 (약 30 충돌/1000 개 세션에 대한 18 사용자) 여기NSDateFormatter dateFromString 충돌

내 코드 :이 경우

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) 

:

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) 

Crashlog입니다 최후의 값은 2017-01-31 20:02:08

나는 아니오 앱이 내 모바일을 크래시하게 만들 수 없습니다 ...

EDIT : 캐나다에 앱이 배포되어 있으며 Locale 문제가 있습니까?

+1

느낌표가 있으면 앱이 다운 될 수 있습니다. 선택 사항을 안전하게 처리하는 방법에 대해 알아보십시오. – vadian

+0

let 또는 guard가 선택 다운 캐스팅을 처리하는 이유는 무엇입니까? ?? – Tuhin

+0

예 다른 문제인지 알고 있습니다. date 변수가 설정되어 있지 않으면 날짜는 nil이됩니다. –

답변

2

로캘 문제 또는 장치 문제 일 수 있습니다. 장치의 꺼짐을 24 시간으로 설정하면 포맷터가이를 사용하여 제공된 형식 문자열을 다시 작성합니다. 시간 형식을 12 시간으로 설정하여 로컬에서 재현 할 수 있습니다.

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

이것은 here을 설명 :이 문제를 방지하려면

, 그것은 수정없이 사용자가 제공 한 형식을 사용하게되는 날짜 포매터의 en_US_POSIX 로케일을 사용합니다.

어쨌든 !을 사용하지 않고 로그 및 오류를 사용하지 않거나 문자열에서 복구 할 수없는 경우 현명한 기본값을 제공하는 것이 더 나을 것입니다.