簡體   English   中英

為什么UserDefaults.standard.set不能保存我的數組? 從后台刪除應用程序后,數據將被清除

[英]Why isn't UserDefaults.standard.set saving my array? After the application is removed from background the data is cleared

我正在使用Swift在我的應用程序中編寫日歷。 雖然它可以正常工作,但是可以輸入數據(事件日志)並將其添加到將在表視圖中顯示的數組中,一旦應用程序關閉並從后台刪除,當我重新打開它時,事件日志消失了。

我的代碼中有任何錯誤嗎?

import UIKit
import JTAppleCalendar
var event = [String]()
var userData = false

class CalendarViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var calendarView: JTAppleCalendarView!
@IBOutlet weak var monthAndYear: UILabel!
@IBOutlet weak var eventTable: UITableView!

override func viewDidAppear(_ animated: Bool) {
    eventTable.reloadData()
}

override func viewDidLoad() {
    super.viewDidLoad()
    configureCalendarView()

    userData = UserDefaults.standard.bool(forKey: "userData")

    if userData == true {
        UserDefaults.standard.object(forKey: "event")  //gets
    }

    else
    {
        event.append("NO USER DATA")
        UserDefaults.standard.set(event, forKey: "event")

        if event[0] == "NO USER DATA" {
            event.remove(at: 0)
            UserDefaults.standard.set(event, forKey: "event")
        }
    }
    eventTable.reloadData()
        }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return event.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: nil)
    cell.textLabel?.text = event[indexPath.row]
    return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete
    {
        event.remove(at: indexPath.row)
        UserDefaults.standard.set(event, forKey: "event")
    }
    eventTable.reloadData()
}

這里有必要的代碼允許在數組中輸入數據:

class AddEventViewController: UIViewController {

@IBOutlet weak var eventText: UITextField!
@IBAction func addEvent(_ sender: Any) {

    userData = true
    UserDefaults.standard.set(userData, forKey: "userData")

    if eventText.text == ""
    {
    }
    else
    {
        event.append(eventText.text!)
        UserDefaults.standard.set(event, forKey: "event")
    }
}

我已經嘗試使用模擬器和真正的iOS設備以及重新安裝Xcode,因為我已經讀過它可能是Xcode本身的一個問題。 我也試過在所有地方添加UserDefaults.standard.synchronize(),但似乎沒有任何效果。

代碼中唯一從UserDefaults中獲取值的行是......

UserDefaults.standard.object(forKey: "event")

這實際上並沒有對該值做任何事情。 得到它......然后把它扔掉。

這將使它看起來沒有被保存。

把它改成......

event = UserDefaults.standard.object(forKey: "event")

調用set后需要調用synchronize()以保存更改

UserDefaults.standard.synchronize()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM