使用 Swift 中的 table 单元格的值设置 UserDefaults 3

Setting UserDefaults using the value of a table cell in Swift 3

我是 Swift 的新手,我正在制作一个音频应用程序。用户将看到 UITableView 并且可以单击要播放的文件 -- 我想在他们返回应用程序时在本地记录该文件已播放。

根据文档,我使用 UserDefaults 作为捕获它的方法,因为它只对那个用户重要。具体来说,我正在尝试将 UITableView 单元格的文本 select 传递到 UserDefaults.

的保存数组中

在我的 table 中,我在此处传递此数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let indexPath = self.tableView.indexPathForSelectedRow {

        // test to see if i can store row name in the defaults array
         let defaults = UserDefaults.standard
         let datastring = TableData[indexPath.row] as? String
         defaults.set(datastring, forKey: "SavedStringArray")

    }
}

正在将 TableData[indexPath.row] 转换为字符串,我相信这是一个可以传递到数组中的序列。

在我的下一个视图中,我尝试调用 SavedStringArray 但它显示一个空集 []:

    let defaults = UserDefaults.standard
    let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()

    print(myarray)

我的最终游戏是我想要的,如果用户要 select 标记为 "Show 1" 和 "Show 3" 的单元格来自 table 将是 return UserDefaults 中保存的数组读取 ["Show 1"、"Show 3"].

有没有更好的方法?

我看到你的 prepareForSegue

有个小问题
if let indexPath = self.tableView.indexPathForSelectedRow {

        // test to see if i can store row name in the defaults array
        let defaults = UserDefaults.standard
        var myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
        if let datastring = TableData[indexPath.row] as? String {
            if !myarray.contains(datastring) {
                myarray.append(datastring)
                defaults.set(myarray, forKey: "SavedStringArray")
                defaults.synchronize()
            }
        }
    }

我上面所做的是在用户默认值中获取已保存的数组并将新字符串附加到数组并将其设置回用户默认值。

希望对您有所帮助