您好我正在使用核心数据框架开发基于表格视图的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的错误:
有什么建议吗?
答案 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)
}