如何在 Swift 的一个部分中删除行中的用户默认数据?
Posted
技术标签:
【中文标题】如何在 Swift 的一个部分中删除行中的用户默认数据?【英文标题】:How to delete userdefault data in rows in a section in Swift? 【发布时间】:2016-10-28 12:49:33 【问题描述】:我一直试图弄清楚如何解决这个问题,并且我能够删除任何行,但由于我不知道如何从其 userdefault
数据中删除选定的行,它只是暂时消失了。我创建了一个名为sections
的实例,其中包含sectionName
和words
。我想访问单词并在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 3 tableView 未在 reloadData() 上更新
在 Swift 中的同一个 VC 上点击按钮后,有没有办法显示以前隐藏在早期代码行中的 UI 元素?