2016-10-03 36 views
1

崩潰我有一個陣列中存儲不同的日期:排序在日期順序的陣列使得在設備

var Dates_Array = [String]() 

然後我有將字符串轉換爲的NSDate的延伸:

extension String{ 
    var StringToDate:NSDate { 
     let df = NSDateFormatter() 
     df.dateStyle = .LongStyle 
     df.timeStyle = .NoStyle 
     return (df.dateFromString(self))! 
    } 
} 

這是代碼排序數組:

self.Ordered_Dates_Array = self.Dates_Array.sort { ($0).StringToDate.compare(($1).StringToDate) == .OrderedAscending} 

在模擬器中,所有這些代碼都按預期工作。但是,當我跑了它的設備上的應用程序崩潰,這裏是錯誤消息的圖像:

當我註釋掉排序數組一切正常的代碼。那麼是什麼原因導致我的應用在設備上崩潰,而不是模擬器?

編輯:

這是Dates_Array樣子:

[ 「2016年12月24日」, 「2016年9月14日」, 「2016年9月19日」,「2016年11月19日「]

我的設備時區是倫敦。語言=英語和日曆=格里高利。

+0

無,你有沒有地方,一行一行,只是檢查在哪裏 –

+1

你的一個或多個字符串不能使用日期格式化器轉換爲日期。順便說一句 - 這種方法很少有效,因爲每個區域設置的'dateStyle'都會不同,甚至根據用戶在Settings設置中的設置。 – rmaddy

+0

那麼爲什麼一個或多個字符串不能轉換爲日期呢?爲什麼會在模擬器中工作,但不在設備上?如果所有的日期都是長時間的,那麼它應該仍然有效? –

回答

0

所以問題是我的日期寫在美國,但我的設備上的區域設置爲英國,它具有不同的日期樣式。謝謝@rmaddy的幫助。

1

替換return (df.dateFromString(self))!有:

if let dateString = df.dateFromString(self) { 
    return dateString 
} else { 
    //Handle situations where the string can't be formatted as date 
    return "Can't convert to date" 
} 

現在你可以知道哪些字符串不能轉換。

+0

顯然他們都不能轉換,但他們可以在模擬器中。 –