从数据源中删除行

时间:2014-06-13 00:43:11

标签: ios xcode uitableview swift

您好我正在使用核心数据框架开发基于表格视图的iPhone应用程序。到目前为止一切顺利,但我在一个非常简单的问题上苦苦挣扎。我刚刚接过斯威夫特,我正在努力教自己以及开发一些有用的东西。我已成功使用核心数据数据库中的数据填充表视图。但是,我正在努力从数据源和tabe视图中删除行。

这是我正在尝试的代码:

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
        }    
    }

ScreenShot的错误: enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分: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)
}