我的tableView
显示array
存储的NSUserDefaults
。在尝试删除其中一行时,我能够更新存储的默认值的数组,但这不会反映在tableView中。
简而言之tableview.reloadData
因某种原因无法重新加载tableView
。
以下是我在usedefaults
UIViewController
的代码
override func viewDidAppear(_ animated: Bool) {
encodedData = UserDefaults.standard.object(forKey: "newSave") as? NSData
saveArticlesArray = (NSKeyedUnarchiver.unarchiveObject(with: encodedData! as Data) as? [SaveArticle])!
offTableView.reloadData()
}
//populating the table
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "OfflineCell", for: indexPath) as! OfflineTableViewCell
cell.offTitle.text = saveArticlesArray[indexPath.row].saveTitle
return cell
}
//Deleting a row and its related stored userdefault
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete{
var tempArray: [AnyObject] = saveArticlesArray as [AnyObject]
tempArray.remove(at: indexPath.row)
DispatchQueue.main.async{
print("reached dispacth")
//self.offTableView.reloadData()
tableView.reloadData()
}
encodedData = NSKeyedArchiver.archivedData(withRootObject: tempArray) as NSData
UserDefaults.standard.set(encodedData, forKey: "newSave")
UserDefaults.standard.synchronize()
}
}
请注意,当我关闭并重新打开ViewController
时,所选行的值会被删除。我只需要重新加载tableView
,以便用户可以看到该行已被删除。
答案 0 :(得分:0)
将此方法替换为tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
,希望这可以解决您的问题。
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete{
saveArticlesArray.remove(at: indexPath.row)
DispatchQueue.main.async{
print("reached dispacth")
//self.offTableView.reloadData()
tableView.reloadData()
}
encodedData = NSKeyedArchiver.archivedData(withRootObject: saveArticlesArray) as NSData
UserDefaults.standard.set(encodedData, forKey: "newSave")
UserDefaults.standard.synchronize()
}
}