2016-12-02 8 views
0

JSONの値から作成されたNSDateオブジェクトを持つクラスを作成しました。文字列の値は、2016-12-02T13:51:23+01:00のようになります。ほとんどの場合、文字列は正常に変換され、日付オブジェクトが作成されますが、オプションの値でアンラップを強制しようとしているときに何らかのアプリケーションがクラッシュします。コードが失敗することがあります:NSDate formatStringは時々nilを返します

self.creationMoment = stringDateFromJson == nil ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssZ") 

誰か知っていますか?

+2

をあなたのコードを変更しようとするあなたは、文字列を表示することができ、その日付に変換することはできませんか? –

+0

もっと詳細を提供する必要があります。実際にエラーの原因となるコード行はどれですか?より関連性の高いコードで質問を更新し、失敗した具体的な例を提供してください。 – rmaddy

+0

失敗したコード行は、私が書いた正確な値で投稿した行です。私があなたに与えた例は、実際のケースの1つです。 –

答えて

0

私はNSDate代わりスウィフトDateとしてcreationMoment変数を再宣言し、この問題が再び現れることはありません、それはアップルのバグかもしれない...

0

オブジェクトがNSNullクラスである可能性がありますか?あなたが使用することができ、この場合 :

self.creationMoment = stringDateFromJson.isKind(of: NSNull) ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssZ") 
+0

'stringDateFromJson'が実際に' NSNull'だった場合、違う方法でコードがクラッシュするので、これは問題にはなりません。 – rmaddy

0

私はあなたのstringDateFromJsonは時々空にあるかもしれないと信じています。したがって、== nilはfalseになり、空の文字列でNSDateを作成しようとするとnilが返されます。何か嘘にこの let isNotValidStringDate = stringDateFromJson == nil || stringDateFromJson.isEmpty self.creationMoment = isNotValidStringDate ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssh")

+0

"2016-12-02T13:51:23 + 01:00"という日付の質問の例は本当のケースでした。アプリケーションがクラッシュしたとき、jsonDateStringを調べて、その文字列を見つけました。さらに、jsonの日付は、エンティティの作成時にバックエンド自動生成の日付のために決して空ではありません... –

関連する問題