2017-05-28 17 views
0

私はto-doリストを持つ私の最初のアプリを作っています。リストアイテムは配列に格納され、テーブルビューに表示されますが、アプリケーションを閉じるとそのアイテムは存在しなくなります。私は項目を保存するためにユーザーのデフォルトを使用しようとしましたが、それまでこれまで働いていません。私は間違って何をしていますか?私は、データを保存するボタンを使用しようとしています。私は、保存ボタンを押したときに、私はアイテムを配列に追加されていることを知っているように、配列がコンソールに出力されるように。私はそれをまた作ったユーザー作成のアレイを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のサブクラスが含まれているボタンアクションに

 defaults.synchronize() 

を追加しましたか? –

+0

'list'は何ですか?あなたは '[String]'の型であると確信していますか? – ozgur

+0

私の配列はリストと呼ばれ、文字列はユーザ​​によって入力されます。そして、はい、私は確かにString型です。カスタムnsobjectサブクラスは含まれません。 –

答えて

-1

問題は文字列配列を取得しているのではなく、要素を配列に追加しているようです。あなたは[文字列]として持ちでない場合は

はあなたのリストを定義考えてみましょう:

var list = [String]() 

あなたは、配列は以下を使用するに要素を追加したい場合は、次の

list.append(txtField.text!) 

私はこれが解決を望みますあなたの問題。がんばろう!

0

私はこの問題を解決: データを取得するとき、私の配列は、しかし、リストと呼ばれていたアプリを閉じた後、私は

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

を使用していたので、私はそれを変更:

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

私も以前の答えによって提案を追加しました。私はグローバル変数としてデフォルト値を設定し、私は

+0

あなたは 'synchronize'を呼び出していません。 – Paulw11

+0

@ Paulw11次回の自動同期が起こる前にユーザーがアプリを終了するような事態を防ぐためには、まだ同期が必要です。 – zfetters

+0

@zfetters is that違います。同期は、スレッド間でデフォルトにアクセスできる場合にのみ必要です。 UserDefaultsはライトスルーキャッシュを使用します。新しい値はすぐにディスクに保存されます。同期すると、メモリ内のキャッシュされた値がディスク上の値で確実にリフレッシュされます – Paulw11

関連する問題