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

时间:2016-05-13 16:57:04

标签: swift

我有一个问题,长期以来一直在处理,从来没有看到原因。

问题

我有一个UItableview并从Firebase加载数据。当我离开"显示"从ViewController#1到ViewController#2(使用UITableView),firebase数据被加载到单元格中。

每个单元格都有一个UITableViewRowAction"删除"这基本上删除了Firebase信息。但是,当我按下按钮时,它确实删除了Firebase信息,但没有删除单元格。为了让UITableView更新,我必须要进行#34; show"回到任何其他ViewController并返回ViewController#2进行更新。

**如果表

中有多个UITableViewCell,则此方法仅更新

问题#2 - 只有1个UITableViewCell

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

我尝试了什么?

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

Iv字面上将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 个答案:

答案 0 :(得分:0)

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