如何在 Swift 的一个部分中删除行中的用户默认数据?

Posted

技术标签:

【中文标题】如何在 Swift 的一个部分中删除行中的用户默认数据?【英文标题】:How to delete userdefault data in rows in a section in Swift? 【发布时间】:2016-10-28 12:49:33 【问题描述】:

我一直试图弄清楚如何解决这个问题,并且我能够删除任何行,但由于我不知道如何从其 userdefault 数据中删除选定的行,它只是暂时消失了。我创建了一个名为sections 的实例,其中包含sectionNamewords。我想访问单词并在UITableView 的行中删除一个选定的单词。还有一个错误。错误显示类型 [String]!没有下标成员。这条线似乎有问题;

removeData(index: sections[indexPath.section].words[indexPath.row])

这是下面的代码;

 struct Section 
    var sectionName: String!
    var words: [String]!

    init(title: String, word: [String]) 
        self.sectionName = title
        self.words = word

    

var sections = [Section]()
        sections = [
        Section(title: "A", word: []), // 1
        Section(title: "B", word: []), //2
        Section(title: "C", word: []),
        Section(title: "D", word: []),
        Section(title: "E", word: []),
        Section(title: "F", word: []),
        Section(title: "G", word: []),
        Section(title: "H", word: []),
        Section(title: "I", word: []),
        Section(title: "J", word: []),
        Section(title: "K", word: []),
        Section(title: "L", word: []),
        Section(title: "M", word: []),
        Section(title: "N", word: []),
        Section(title: "O", word: []),
        Section(title: "P", word: []),
        Section(title: "Q", word: []),
        Section(title: "R", word: []),
        Section(title: "S", word: []),
        Section(title: "T", word: []),
        Section(title: "U", word: []),
        Section(title: "V", word: []),
        Section(title: "W", word: []),
        Section(title: "X", word: []),
        Section(title: "Y", word: []),
        Section(title: "Z", word: [])
    ]




func getData() -> [String] 
    if let data = userdefaultData.stringArray(forKey: "data") 

        return data
    
    return []



 func removeData(index: Int) 
    var data = getData()
    data.remove(at: index)
    userdefaultData.set(data, forKey: "data")


// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) 

    if editingStyle == .delete 
        // Delete the row from the data source

        tableView.beginUpdates()

        // Delete the row from the data source
        if getData().count > 0 
            removeData(index: sections[indexPath.section].words[indexPath.row])
        

        tableView.deleteRows(at: [indexPath], with: .fade)

        tableView.endUpdates()



     else if editingStyle == .insert 
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    

【问题讨论】:

在你的 Nsuedefault 更改后添加一行 userDefaults.synchronize() 错误提示类型 [String]!没有下标成员。这条线似乎有问题; removeData(index: section[indexPath.section].words[indexPath.row]) 看起来您正在将字符串传递给采用 int 的函数? section[indexPath.section].words[indexPath.row] 应该返回一个字符串 @Ryo 您是要从 tableView 还是从 userDefaults 中删除该部分? 我正在尝试从 tableview 和 userDerfault 中删除部分中的一行! 【参考方案1】:

如我所见,您正试图从数据中删除给定的单词。我建议执行以下操作:

首先找到您要删除的词,getData.count > 0 语句正文。

if getData().count > 0 
        let section = sections[indexPath.section
        let word = section.words[indexPath.row]
        remove(word)

比起用这个函数替换removeData函数:

func remove(_ word: String) 
    var data = getData()

    // Lets search for the removeable word's index in the array
    var index = 0
    for wordCandidate in data 
        if wordCandidate == word 
            // Once found, exit from the loop
            return
        
        // if not found, increase the index by one
        index += 1
    
    // Remove the word at the right index
    data.remove(at: index)
    userdefaultData.set(data, forKey: "data")

希望对你有帮助!

【讨论】:

谢谢,但错误提示第 5 节中的行数无效。更新 (1) 后现有节中包含的行数必须等于之前该节中包含的行数更新 (1),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入,0 移出) .' 它崩溃了,因为你也需要更新 tableView 的数据源。看看这个帖子怎么做:***.com/questions/8306792/uitableview-reload-section

以上是关于如何在 Swift 的一个部分中删除行中的用户默认数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Swift 中表格视图单元格中的默认删除按钮?

Swift 3 tableView 未在 reloadData() 上更新

如何添加到当前存储在用户默认值 Swift 4 中的数字

在 Swift 中的同一个 VC 上点击按钮后,有没有办法显示以前隐藏在早期代码行中的 UI 元素?

如何从图像文字数组中选择单个图像并将其保存为swift 5中的用户默认值

Xamarin:如何删除网格中特定行中的项目