2017-05-28 57 views
0

我正在製作我的第一個應用程序,它有一個待辦事項列表。列表項目存儲在數組中並顯示在Table View中,但是當關閉應用程序時,項目不再存在。我嘗試使用用戶默認值來保存項目,但它迄今還沒有工作。我究竟做錯了什麼?我正在嘗試使用保存數據的按鈕。無法將用戶創建的陣列保存到UserDefaults

///button to save the data 
@IBAction func savelist(_ sender: Any) { 

    let defaults = UserDefaults.standard 
    defaults.set(list, forKey: "SavedArray") 
    myTableView.reloadData() 
} 
//// retrieving the data 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    let defaults = UserDefaults.standard 
    let array = defaults.stringArray(forKey: "SavedArray") ?? [String]() 
    myTableView.reloadData() 

} 

我還說得那麼,當我按下保存按鈕,該陣列將被打印到控制檯,讓我知道,項目被添加到陣列中。問題是我無法保存這些項目。謝謝!

+0

名單是否包含定製NSObject的子類? –

+0

什麼是「列表」?你確定它是'[String]'的類型嗎? – ozgur

+0

我的數組被稱爲列表,並且字符串由用戶輸入。是的,我確定是一個字符串類型。它不包含自定義的nsobject子類。 –

回答

-1

您的問題似乎沒有檢索字符串數組,但將元素添加到數組中。

考慮定義您的列表,如果你還沒有爲[字符串]:

var list = [String]() 

如果你想在陣列使用以下方法來添加元素:

list.append(txtField.text!) 

我希望這個解決你的問題。祝你好運!

0

我解決了這個問題: 我的數組被稱爲名單,但是,關閉應用程序後檢索數據當我使用

let array = defaults.stringArray(forKey: "SavedArray") ?? [String]()

所以我把它改爲:

list = defaults.stringArray(forKey: "SavedArray") ?? [String]() 

我還添加了以前的答案。我的默認設置爲全局變量,我增加

 defaults.synchronize() 

的按鈕動作

+0

您並不想要調用'synchronize' – Paulw11

+0

@ Paulw11同步調用仍然是必要的,以防止在下一次自動同步發生之前用戶終止應用程序的情況,在這種情況下數據實際上不會被保存 – zfetters

+0

@zfetters即不對。只有在線程可以訪問默認值的情況下才需要同步。 UserDefaults使用直寫緩存。新值將立即保存到磁盤。同步確保內存中緩存的值使用磁盤上的值進行刷新 – Paulw11