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

Ios 使用Swift 3中表格单元格的值设置UserDefaults,ios,swift,uitableview,nsuserdefaults,Ios,Swift,Uitableview,Nsuserdefaults,我是Swift的新手,我正在制作一个音频应用程序。用户将看到UITableView,并可以单击要播放的文件-我想在本地记录,当他们返回应用程序时,该文件已经播放了 根据文档,我使用UserDefaults作为捕获此信息的方法,因为它只对该用户重要。具体来说,我试图将他们选择的UITableView单元格的文本传递到保存的UserDefault数组中 在我的表格中,我在这里传递这些数据: override func prepare(for segue: UIStoryboardSegue, sen

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

根据文档,我使用UserDefaults作为捕获此信息的方法,因为它只对该用户重要。具体来说,我试图将他们选择的UITableView单元格的文本传递到保存的UserDefault数组中

在我的表格中,我在这里传递这些数据:

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,但它显示了一个空集[]:

我的最终目的是,如果用户要从表中选择标记为Show 1和Show 3的单元格,那么将返回UserDefaults中保存的数组,读取[Show 1,Show 3]


有更好的方法吗

我发现你的备考中有个小问题

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


希望对你有所帮助

我发现你在准备过程中遇到了一个小问题

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


希望对您有所帮助

您正在默认设置字符串并将其作为数组检索。毫无疑问,它将返回空数组?String您正在默认设置字符串并将其作为数组检索。毫无疑问,它将返回空数组?StringHey Sandeep,刚刚运行了这个,它工作了!我只需要弄清楚如果用户播放两次曲目,如何排除重复值,这不是我上面问题的一部分。谢谢你的帮助!不是你的问题,但顺便说一句。别忘了调用defaults.synchronizet为了防止重复值,您只需检查,如果已通过调用myarray.indexof将该值包含在数组中:datastring@grigory-科诺瓦洛夫:我完全同意你的观点,我没有随身携带我的系统,我在电话上发布了答案,我会在一个小时内用你的建议更新我的答案while@darkginger当前位置请现在查看答案这将解决您的重复问题进入问题,以及嘿Sandeep,刚刚运行了这个,它的工作!我只需要弄清楚如果用户播放两次曲目,如何排除重复值,这不是我上面问题的一部分。谢谢你的帮助!不是你的问题,但顺便说一句。别忘了调用defaults.synchronizet为了防止重复值,您只需检查,如果已通过调用myarray.indexof将该值包含在数组中:datastring@grigory-科诺瓦洛夫:我完全同意你的观点,我没有随身携带我的系统,我在电话上发布了答案,我会在一个小时内用你的建议更新我的答案while@darkginger当前位置请现在查看答案这将解决您的重复问题入境问题也是如此
    let defaults = UserDefaults.standard
    let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()

    print(myarray)
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()
            }
        }
    }