これがモデルからオブジェクトを削除するための関数だとしましょう:
func delete(indexPath: IndexPath) {
let managedObject = self.fetchedResultsController.object(at: indexPath)
self.managedObjectContext.delete(managedObject)
do {
// Save changes
try self.managedObjectContext.save()
// Cancel the notification
let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: [managedObject.uuid!])
center.removePendingNotificationRequests(withIdentifiers: [managedObject.uuid!])
// Reload tableView
self.tableView.reloadData()
} catch {
let alertController = UIAlertController.init(title: "Error", message: "We are sorry! Unknown error occured...", preferredStyle: .alert)
alertController.addAction(UIAlertAction.init(title: "Close", style: .default, handler: { (action) in
// Completion handler
}))
self.present(alertController, animated: true, completion: {
// Completion block
})
}
}
質問:
エラーがスローされた場合、実行はcatch
句に転送されます。それはすばらしい。しかし、ステートメント (コードの残りの部分、通知をキャンセルし、tableView をリロードする) はどうなりますか? それらのステートメントはまだ実行可能ですか、それとも単純に無視されますか?