如何在 TableView 中保存数据?

How can I save data inside a TableView?

在我的应用程序中,我有一个标签,当用户点击视图或摇动 iPhone 时,它会随机更改引号。如果用户双击同一个视图,它应该将引用保存在 TableView 中。 一开始我以为可以用CoreData,但是他不行。现在我正在使用 UserDefaults,现在如果我双击视图,报价将被保存,但一次只能保存一个。我想要做的是他创建一个列表,其中包含用户双击的所有引号。

这是 doubleTap 对象中的代码:

let savedQuotes = UserDefaults.standard.setValue(quoteLabel.text!, forKey: "saveQuotes")

    if let printSavedQuotes = UserDefaults.standard.string(forKey: "saveQuotes"){

        print(printSavedQuotes)

    }

下面是我在 TableVIew 中使用的代码:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    _ = UserDefaults.standard.string(forKey: "saveQuotes")

    return 15
    
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "QuoteCell", for: indexPath)
    
    if let printSavedQuotes = UserDefaults.standard.string(forKey: "saveQuotes"){
        
        cell.textLabel?.text = "\(printSavedQuotes)"
        
    }

这是问题的图片。

请在Swift中了解Collections。你要找的是 Array 类型。表示按特定顺序存储的元素集合的类型。

文档: https://developer.apple.com/documentation/swift/array

现在当你学习如何将东西保存到数组中时,你可以将这个数组连接到你的tableView

最基本的设置是:

var quotes: [String] = ["quote1", "quote2", "quote3"]

numberOfRowsInSection你returnquotes.count

并且在 cellForRow 你的 cell.textLabel.text == quotes[indexPath.row]

按照下面的方法尝试..

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let savedQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()

    return saveQuotes.count

}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "QuoteCell", for: indexPath)

    let saveQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()

    cell.textLabel?.text = saveQuotes[indexPath.row]

    return cell
}

func saveQuote(){

    var saveQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()

    saveQuotes.append(quoteLabel.text!)

    UserDefaults.standard.set(saveQuotes, forKey: "saveQuotes")

    print(saveQuotes)
}

这只是一个示例,推荐的方法是使用 sqlite 或 core-data 来存储持久数据而不是 UserDefaults。