从数据源中删除行

Posted

技术标签:

【中文标题】从数据源中删除行【英文标题】:Delete the row from data source 【发布时间】:2014-06-13 00:43:10 【问题描述】:

您好,我目前正在使用核心数据框架开发基于表格视图的 iPhone 应用程序。到目前为止进展顺利,但我在一个非常简单的问题上苦苦挣扎。我刚刚学习了 Swift,我正在尝试自学并开发一些有用的东西。我已经成功地用核心数据数据库中的数据填充了一个表视图。但是,我正在努力从数据源和表视图中删除该行。

这是我目前正在尝试的代码:

override func tableView(tableView: UITableView?, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath?) 
        let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let context:NSManagedObjectContext = appDel.managedObjectContext
        if editingStyle == .Delete 
            println("Delete")
            // Delete the row from the data source
            context.deleteObject(myData.objectAtIndex(indexPath.row) as NSManagedObject)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
         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
            
    

错误截图:

有什么建议吗?

【问题讨论】:

您需要解开 indexPath?tableView? 变量 - 重复 - ***.com/questions/24040405/… 感谢您的回答。 【参考方案1】:

必须先解包可选变量,然后才能访问它们的成员。

有两种方法可以解开可选变量。

你可以用感叹号强制解包:

indexPath!.row

但是,如果 indexPath(正在解包的任何变量)是 nil,这将导致运行时异常。

或者您可以测试nil,如果不是nil,则解包:

if let unwrappedIndexPath = indexPath 
    // do something with unwrappedIndexPath.row


if let tv = tableView 
    tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

【讨论】:

如何解决我得到的第二个错误:'UITableView?'没有成员“deleteRowsAtIndexPaths”? 以完全相同的方式。

以上是关于从数据源中删除行的主要内容,如果未能解决你的问题,请参考以下文章

我正在从 gridview 中删除行,但表中的所有数据都已删除

使用每行的按钮从数据视图中删除行

从单列数据框中删除行

从核心数据实体中删除对象/行

使用python烧瓶从数据库中删除行?

从数据框中删除行的命令[重复]