2017-08-23 20 views
-1

ToDoリストアプリケーションを作成して、1つのビューコントローラにタスクを入力し、別のビューコントローラの配列にデータを保存してテーブルに追加しました。私の唯一の問題は、私がアプリケーションを閉じると、すべての新しいタスクデータがなくなったということです。誰も助けることができますか?swiftを使用してデータを永久に保存する3

私はUserDefaultsを使用しようとしましたが、うまく機能しなかったし、正しく使用しなかっただけです。

これは私が新しいタスクを入力ビューコントローラからのコードです:

@IBAction func addTaskButton(_ sender: Any) 
{ 
    if (textField.text != "") { 
     Task.append(textField.text!) 

     let task = UserDefaults.standard.set(Task, forKey: "XX") 

     textField.text = "" 
     textLabel.text = "SAVED!" 
     timer = Timer.scheduledTimer(timeInterval: 1.6, target: self, selector: #selector(AddTaskViewController.Hide), userInfo: nil, repeats: true) 

     textLabel.isHidden = false 
    } 
} 

これは私がデータを保存し、テーブル

に配置しようとするビューコントローラからのコードです
var Task = ["Pray", "Code", "Work-Out"] 
var School = ["Email Collin College","Email PQC","Create file for all my doccumensts"] 
var ShoppingList = ["KD9 Black","RoshRun Black","Nike Huarache Black","White Shirt","Black Shirt", "Black Work Out pnats", "White Socks"] 
var Prayer = ["School","Family","Drive & Grace"] 
var WorkOut = ["Legs","Caffs","Push Ups","Arms","Chest Press","Squats", "Back"] 

class add_Task_TableViewController: UIViewController,UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet weak var TaskTableView: UITableView! 

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return (Task.count) 
    } 

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 
     let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 
     cell.textLabel?.text = Task[indexPath.row] 
     return(cell) 
    } 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) 
    { 
     if editingStyle == UITableViewCellEditingStyle.delete 
     { 
      Task.remove(at: indexPath.row) 
      TaskTableView.reloadData() 
     } 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     TaskTableView.reloadData() 
    } 
+0

UserDefaultsを使用すると、正確な問題はどのように直面しますか? – Yuyutsu

答えて

0

データベースをSQLiteとして使用すると、後でアプリケーションを開いたときに使用できるドラフトのメッセージや値を維持できます。

0

userDefaultsを使用してToDoリストを保存できます。しかし、あなたが欠けているのは、あなたが正しく格納しているということですが、あなたはuserDefaultsから格納された配列を検索しません。

これを解決するには、viewDidAppearメソッドを次のコードスニペットに変更します。

override func viewDidAppear(_ animated: Bool) { 
    Task = UserDefaults.standard.stringArray(forKey: "XX") ?? [String]() 
    TaskTableView.reloadData() 
} 
+0

'UserDefaults'はアプリデータを保存する場所ではありません。 – rmaddy

+0

ええ、あなたは正しい@rmaddyです。それは、ユーザーの好みのような少量のデータを保存するためにそこにあるので、巨大なデータを格納する正しい場所ではありません。 Perewillzの質問では、タスクが完了した後にリストから削除されるので、ユーザーごとのtodoリストはそれほど膨大なデータを生成しません。これは一般的なtodoリストのアプリケーションです。 –

+0

ありがとう!それは完全に働いたhttps://stackoverflow.com/users/6643110/krishnarjun-banoth !! – Perewillz

関連する問題