2016-12-02 60 views
0

我創建了一個類,它有一個NSDate對象,它是從JSON中的值創建的。字符串值類似於:2016-12-02T13:51:23+01:00。大多數時候字符串被成功轉換並且創建了日期對象,但是當嘗試強制展開可選值時,SOMETIMES應用程序崩潰,我不知道在哪裏。有時失敗的代碼行是:NSDate formatString有時返回無

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

有沒有人有一些想法?

+2

你能告訴字符串,無法轉換爲日期? –

+0

你需要提供更多的細節。哪一行代碼實際上會導致錯誤?用更相關的代碼更新你的問題,並提供失敗的具體例子。 – rmaddy

+0

失敗的代碼行是我用我寫的確切值發佈的代碼。我給你的例子是真實案例之一。 –

回答

0

我重新聲明creationMoment變量斯威夫特Date,而不是NSDate這個問題不會再次出現,它可能是一個蘋果軟件缺陷......

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將是錯誤的,並且當試圖用空字符串創建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日期從不爲空... –