gpt4 book ai didi

swift - 为什么 "Show"Segue 更新 UITableViewCells 但不更新 reloadData()?

转载 作者:行者123 更新时间:2023-11-30 13:25:46 24 4
gpt4 key购买 nike

我有一个问题,我已经处理了很长时间,但一直没有抽出时间去了解原因。

问题

我有一个 UItableview 并从 Firebase 向其中加载数据。当我将“show”从 ViewController #1 转到 ViewController #2(使用 UITableView)时,Firebase 数据将加载到单元格中。

每个单元格都有一个 UITableViewRowAction“删除”,它基本上会删除 Firebase 信息。但是当我按下按钮时..它确实删除了 Firebase 信息,但不删除单元格。为了更新 UITableView,我必须将“show”返回到任何其他 ViewController,然后返回 ViewController #2 来更新它。

** 此方法仅在表格中存在超过 1 个 UITableViewCell 时更新

问题 #2 - 只有 1 个 UITableViewCell

现在,如果只加载了 1 个 UITableViewCell 并且我“删除”了它......它永远不会消失,除非我在 ViewController #2 中创建一个新的 UITableViewCell。

我尝试了什么?

self.tableView.endUpdates()
self.tableView.reloadData()

我确实将 reloadData() 插入到我能看到的任何地方,看看是否会重新加载数据,但它就是不会重新加载它!

let delete = UITableViewRowAction(style: .Default, title: "Delete", handler: { (action, indexPath) in
self.tableView.dataSource?.tableView?(
self.tableView,
commitEditingStyle: .Delete,
forRowAtIndexPath: indexPath
)
self.tableView.beginUpdates()
let uid = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String // uid
DataService.dataService.deleteAudio(uid, project: self.sharedRec.projectName, vocalString: self.sharedRec.audioString )

let currURL = self.sharedRec.audioString
let url = "\(currURL).caf"

//Document Directory
let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
// Full File to Delete Location
let fileURL = dirPath.stringByAppendingPathComponent(url)
// This is to print out all directory files
let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

do {
tableView.beginUpdates()
print("DELETED LOCAL RECORD")

try NSFileManager.defaultManager().removeItemAtPath(fileURL)
print("file deleted \(fileURL)")
let directoryContents = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
print("PRINT LOCAL DIC\(directoryContents)") // NOT WORKING
self.tableView.reloadData()
} catch {
print("error")
}
tableView.deleteRowsAtIndexPaths([NSArray arrayWithObject: indexPath], withRowAnimation: .Automatic) // SHOWS ERROR
self.tableView.endUpdates()
return
})

error

最佳答案

  1. 在函数 commitEditingStyle 中删除数组、数据库等中的数据。
  2. 减少当前的行数。
  3. tableView.beginUpdates()
  4. tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
  5. tableView.endUpdates()

关于swift - 为什么 "Show"Segue 更新 UITableViewCells 但不更新 reloadData()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com