다음 코드를 사용하여 UITableView에서 행을 삭제합니다. 내가 삭제 된 행이있는 tableView에 남아 코드에 경고를 추가 할 때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)
}
}
}
}
모든 것이 잘 작동합니다.
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
당신은 어떤 방법을 사용합니까? 코드에 경고가 없으면 모든 것이 잘되고 삭제 된 행은 사라집니다. 경고가 사용될 때 코드는 controllerDidChangeContent 및 controllerWillChangeContent 및 컨트롤러 메서드를 전혀 호출하지 않습니다. – Milligator