Я использую следующий код, чтобы удалить строку из UITableView.Удалить строку из UITableview
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
let personToDelete = self.fetchResultController.objectAtIndexPath(indexPath) as! Person
if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {
managedObjectContext.deleteObject(personToDelete)
do{
try managedObjectContext.save()
} catch {
print(error)
}
}
}
}
и все работает отлично , когда я добавить сигнал к коду удаляемая строка будет оставаться в Tableview.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
let personToDelete = self.fetchResultController.objectAtIndexPath(indexPath) as! Person
let confirmDelete = UIAlertController(title: "Remove Person", message: "Are you sure to delete \"\(personToDelete.name!)\" and all of its data.", preferredStyle: .ActionSheet)
presentViewController(confirmDelete, animated: true, completion: nil)
let deleteAction = UIAlertAction(title: "Delete", style: .Destructive, handler: { (action : UIAlertAction) in
if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {
managedObjectContext.deleteObject(subjectToDelete)
do {
try managedObjectContext.save()
} catch {
print(error)
}
}
})
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action : UIAlertAction) in
})
confirmDelete.addAction(deleteAction)
confirmDelete.addAction(cancelAction)
presentViewController(confirmDelete, animated: true, completion: nil)
}
}
Я попытался отладить использование некоторых точек останова на beginUpdates и endUpdates. , но кажется, что, когда я использую предупреждение, они не будут вызваны.
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
print("update ended")
}
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView.beginUpdates()
print("update Started")
}
без линий печати tableView не имеет никаких изменений, если не закрывать и не открывать представление. , когда я добавить строки печати ошибка приходит
Нагрузочного приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «Применение пыталось представить модально активный контроллер
чем проблема?
Используете ли вы методы делегата 'NSFetchedResultsController', и если да, то называются ли вообще методы? – vadian
какие методы вы используете. когда код без предупреждения, все в порядке, и удаленная строка исчезнет, а исчезнет. Когда используется предупреждение, код не вызывает контроллерDidChangeContent и controllerWillChangeContent и методы управления вообще. – Milligator