如何防止刪除規則拒絕中的錯誤?我有一個警告,要求用戶刪除一條記錄,但檢查它是否可以刪除首先在覈心數據堆棧的保存方法中發生。我trieb與抓住它:如何防止核心數據中刪除規則拒絕的錯誤Swift 3
if (self?.categoryToEdit.toMyplace == nil){
let alertController = UIAlertController(title: "Kategorie löschen", message: "Die Kategorie " + categoryName + " kann nicht gelöscht werden!\r\nSie ist ", preferredStyle: .actionSheet)
let cancelButton = UIAlertAction(title: "Abbrechen", style: .cancel, handler: { [weak self](action) -> Void in
self?.tableView.setEditing(false, animated: true)
self?.attemptFetch()
self?.tableView.reloadData()
return
})
alertController.addAction(cancelButton)
self?.present(alertController, animated: false, completion: nil)
}else{
self?.displayActionSheet(indexPath: indexPath as NSIndexPath)
}
所以我從編譯器錯誤:致命錯誤:意外發現零而展開的可選值
我該怎麼解決呢?
在此先感謝!
編輯
謝謝! 這裏是完整的代碼。 它從tableView動作開始,並被轉發到處理警報的單獨函數。這個函數中沒有註釋的部分並不真正起作用。當它處理錯誤時,我首先得到一個警報。 如果記錄沒有從tableView中消失,並且在工作數組的索引中留下香,這將不會是一個巨大的問題。 這個問題一直存在,直到應用程序將重新啓動,沒有機會得到未刪除的記錄。我嘗試新的提取請求並重新載入表格日期,但直到新的開始時它纔會保留。
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let edit = UITableViewRowAction(style: .normal, title: "Ändern") { [weak self] action, index in
self?.editMode = true
let cell = tableView.cellForRow(at: indexPath) as! CategoryTVCell
self?.configureCell(cell: cell, indexPath: indexPath)
context.performAndWait{
if let obj = self?.controller.fetchedObjects , obj.count > 0 {
self?.categoryToEdit = obj[indexPath.row]
self?.categoryToEditName = self?.categoryToEdit.name!
}
}
self?.showAlertWithText()
self?.showAlertWithText()
tableView.isEditing = false
}
let delete = UITableViewRowAction(style: .normal, title: "Löschen") { [weak self] action, index in
self?.displayActionSheet(indexPath: indexPath as NSIndexPath)
}
edit.backgroundColor = UIColor(colorLiteralRed: 179.0/255.0, green: 179.0/255.0, blue: 179.0/255.0, alpha: 1)
delete.backgroundColor = myRedAlertColor
return [delete, edit]
}
private func displayActionSheet(indexPath: NSIndexPath)
{ let categoryName = categoryArray[indexPath.row]
let alertController = UIAlertController(title: "Kategorie löschen", message: "Soll die Kategorie " + categoryName + " gelöscht werden?\r\nDie Kategorie kann nur gelöscht werden, wenn kein myPlace damit verbunden ist!", preferredStyle: .actionSheet)
let deleteCategory = UIAlertAction(title: "Löschen", style: .destructive, handler: { [weak self](action) -> Void in
self?.tableView.isEditing = false
//if (self?.categoryToEdit.toMyplace == nil)/*((self?.myPlace?.toCateogry == nil))*/{
context.delete((self?.controller.fetchedObjects?[indexPath.row])!)
self?.categoryArray.remove(at: indexPath.row)
self?.attemptFetch()
self?.tableView.reloadData()
//}else{
/*let alertController = UIAlertController(title: "Kategorie löschen", message: "Die Kategorie " + categoryName + " kann nicht gelöscht werden!\r\nSie ist ", preferredStyle: .actionSheet)
let cancelButton = UIAlertAction(title: "Abbrechen", style: .cancel, handler: { [weak self](action) -> Void in
self?.tableView.setEditing(false, animated: true)
self?.attemptFetch()
self?.tableView.reloadData()
})
alertController.addAction(cancelButton)
self?.present(alertController, animated: false, completion: nil)*/
//}
do{
try context.save()
}catch{
let alertController = UIAlertController(title: "Kategorie löschen", message: "Die Kategorie " + categoryName + " kann nicht gelöscht werden!\r\nAlle myPlaces verlieren sonst diese Zuordnung!", preferredStyle: .actionSheet)
let cancelButton = UIAlertAction(title: "Abbrechen", style: .cancel, handler: { [weak self](action) -> Void in
self?.tableView.setEditing(false, animated: true)
self?.attemptFetch()
self?.tableView.reloadData()
})
alertController.addAction(cancelButton)
self?.present(alertController, animated: false, completion: nil)
}
})
let cancelButton = UIAlertAction(title: "Abbrechen", style: .cancel, handler: { [weak self](action) -> Void in
self?.tableView.setEditing(false, animated: true)
})
alertController.addAction(deleteCategory)
alertController.addAction(cancelButton)
alertController.view.tintColor = .orange //UIColor(red: 0, green: 0, blue: 51)
//self.navigationController!.present(alertController, animated: true, completion: nil)
present(alertController, animated: false, completion: nil)
}
能否請您分享您的代碼,不會刪除。另外你的核心數據棧是什麼樣的? –