2017-01-08 149 views
0

我有一個名爲Stop的類。本課實施NSCoding。我可以將Stop的實例保存到UserDefaults中,而不會出現任何問題。到現在爲止還挺好。我的問題是保存Array停止。這是我嘗試:Swift:無法將數組保存到UserDefaults

private func save(stopArray array: [Stop],withKey key: String) { 
     let data = NSKeyedArchiver.archivedData(withRootObject: array) 
     self.userDefaults.set(data, forKey: key) 
     self.userDefaults.synchronize() 
    } 

private func loadStopArray(key: String) -> [Stop]? { 
     guard let data = self.userDefaults.object(forKey: key) as? Data else { 
      return nil 
     } 
     return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop] 
} 

現在,每次我撥打loadStopArray我得到一個空數組。不是零,只是一個空的數組。

任何想法?謝謝!

+1

爲了判斷髮生了什麼,我想我們需要看到您的止損的執行。 – matt

+0

您確定在保存和檢索時使用的是相同的確切鍵嗎? –

+0

@matt你是對的,我的NSCoder構造函數返回零...謝謝! – Yotam

回答

1

您在爲容易混淆加載ObjectDataself.userDefaults.object()self.userDefaults.data()將產生數據。

private func loadStopArray(key: String) -> [Stop]? { 
     if let data = self.userDefaults.data(forKey: key) { 
      return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop] 
     } else { 
      return nil 
     } 
}