我从核心数据中删除记录时收到EXC_BAD_INSTRUCTION Error
。这是代码:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
//deleteIncidents()
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
context.delete(candles[indexPath.row] as! NSManagedObject)
candles.removeAtIndex(indexPath.row)
do{
try context.save()
}
catch{
}
//tableView.reloadData()
// remove the deleted item from the `UITableView`
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
答案 0 :(得分:0)
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
你有没有使用这个代码。甚至会崩溃。可能这是你的谓词中的一个你的谓词的问题是获得空值。你想从核心数据中获取具有空值的数据,这是不可用的数据库。
答案 1 :(得分:0)
而是使用以下方法删除
context.delete(candles[indexPath.row] as! NSManagedObject)
你应该使用
context.deleteObject(candles[indexPath.row] as! NSManagedObject)
- (void)delete:(id)sender
:从用户界面中删除选择。 当用户点击编辑菜单的删除命令时,将调用此方法。 UIResponder的子类通常通过从用户界面中删除所选对象来实现此方法,如果适用,还从应用程序的数据模型中删除。它不应该向粘贴板写入任何数据。该命令从第一响应者行进到响应者链直到它被处理;如果没有响应者处理它,它将被忽略。如果响应者未在当前上下文中处理该命令,则应将其传递给下一个响应者。
- (void)deleteObject:(NSManagedObject *)object
:指定在提交更改时应从其持久性存储中删除的对象。 提交更改时,将从uniquing表中删除对象。如果对象尚未保存到持久存储中,则只需将其从接收方中删除。