2017-06-29 8 views
0

私たちのiPhoneアプリ内で、私たちはapi呼び出しから取得した日付を解析します。日付が正しく返され、有効な日付です。今や、一部のデバイスでのみ、予期せぬことにnilが見つかったというエラーでクラッシュし、オプションの値をアンラッピングします。問題のコードは次のとおりです。日付フォーマッタでiPhoneがランダムにクラッシュする

//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:SS:MM」の日付は、常にこの形式で

来るように、クラスの関数への呼び出しは次のようになります。

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

大部分のデバイスはクラッシュしますが、一部のデバイスはクラッシュします。クラス関数を使用しない場合、アプリケーションは正しく動作します。私はそれが原因ではないと誰もがなぜこれが起こっている可能性があり、解決策を見ている場合は、私に知らせてください。

これは重複している可能性がありますが、実行した検索では表示されませんでした。コミュニティのおかげで、彼らは既に答えがstackoverflowである別の同様の質問を指摘しました。これが重複していると私の謝罪です。

+0

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

は、より多くの詳細については、Appleのリンクを参照してください。 'nsDate'、あなたはガードステートメントに入れてください。ほとんどの場合、アプリケーションがクラッシュするデバイスで、 'DateFormatter'で使用されるかなりの情報を指定していないため、その他の設定(ロケールなど)が異なり、日付の解析で問題が発生する可能性があります。 –

+0

Thanks Martin R私が検索したとき、私はそのように見えませんでした。私はこれを削除しても構いませんが、他人を助けるかもしれません。私はあなたの投稿した質問を編集して指します。 –

+0

解決策は "Martin R"と同じですが、ミカの混乱を理解しています。 – kulss

答えて

2

ロケールの問題です。 DateFormatterは、デバイスの現在の場所の設定(日付と時刻を含む)に依存します。

あなたは、フォーマッタのロケールが常にen_US_POSIXにそのロケールを設定することにより、静的であることを確認することができます:あなたはの強制アンラップを使用してはならない

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

+1

これは修正プログラムでした。みんな、ありがとう。 –

関連する問題