Ios NSFetchedResultsController的节数无效

Ios NSFetchedResultsController的节数无效,ios,swift,core-data,nsfetchedresultscontroller,Ios,Swift,Core Data,Nsfetchedresultscontroller,我正在使用NSFetchedResultsController管理我的tableView数据源,但当我尝试添加实体时,它会不断崩溃,导致以下错误: 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:无效的节数。”。更新后表视图中包含的节数(1)必须等于更新前表视图中包含的节数(0),加上或减去插入或删除的节数(0插入,0删除)。“ 执行此代码时发生错误: let exerciseToAdd = Workout_Exercise(

我正在使用NSFetchedResultsController管理我的tableView数据源,但当我尝试添加实体时,它会不断崩溃,导致以下错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:无效的节数。”。更新后表视图中包含的节数(1)必须等于更新前表视图中包含的节数(0),加上或减去插入或删除的节数(0插入,0删除)。“

执行此代码时发生错误:

let exerciseToAdd = Workout_Exercise(context: DataController.shared.context)
        exerciseToAdd.name = exercise
        exerciseToAdd.exerciseIndex = Int16((currentWorkout?.exercises?.allObjects.count)! + 1)
        let firstEmptySet = CDSet(context: DataController.shared.context)
        exerciseToAdd.addToSets(firstEmptySet)
        currentWorkout.addToExercises(exerciseToAdd)
NSFetchedResultsController是为实体
CDSet
设置的,我很确定我有所有必要的协议存根:

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
    tableView.beginUpdates()
}

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
    tableView.endUpdates()
}

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
    switch type {
    case .insert:
        tableView.insertRows(at: [newIndexPath!], with: .fade)
    case .delete:
        tableView.deleteRows(at: [newIndexPath!], with: .fade)
    default:
        break
    }
}

func numberOfSections(in tableView: UITableView) -> Int {
    if let sections = fetchedResultsController.sections?.count {
        return sections
    } else {
        return 0
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let rows = fetchedResultsController.sections?[section].numberOfObjects {
        return rows
    } else {
        return 0
    }
}
func controllerWillChangeContent(\ucontroller:NSFetchedResultsController){
tableView.beginUpdate()
}
func controllerDidChangeContent(\控制器:NSFetchedResultsController){
tableView.endUpdates()
}
func控制器(controller:NSFetchedResultsController,didChange anObject:Any,在indexPath:indexPath?处,对于类型:NSFetchedResultsChangeType,newIndexPath:indexPath?){
开关类型{
案例.插入:
tableView.insertRows(位于:[newIndexPath!],带:.fade)
案例.删除:
tableView.deleteRows(位于:[newIndexPath!],带:.fade)
违约:
打破
}
}
func numberOfSections(在tableView:UITableView中)->Int{
如果let sections=fetchedResultsController.sections?.count{
返回段
}否则{
返回0
}
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
如果let rows=fetchedResultsController.sections?[section].numberOfObjects{
返回行
}否则{
返回0
}
}
这是我正在使用的获取请求:

    let fetchRequest:NSFetchRequest<CDSet> = CDSet.fetchRequest()
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "exercise", ascending: false)]
    fetchRequest.predicate = NSPredicate(format: "exercise.workout == %@", currentWorkout)
    
    fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DataController.shared.context, sectionNameKeyPath: "exercise", cacheName: nil)
    fetchedResultsController.delegate = self
    
    do {
        try fetchedResultsController.performFetch()
    } catch {
        
    }
let fetchRequest:NSFetchRequest=CDSet.fetchRequest()
fetchRequest.sortDescriptors=[NSSortDescriptor(键:“练习”,升序:false)]
fetchRequest.predicate=NSPredicate(格式:“exercise.workout==%@”,currentWorkout)
fetchedResultsController=NSFetchedResultsController(fetchRequest:fetchRequest,managedObjectContext:DataController.shared.context,sectionNameKeyPath:“练习”,cacheName:nil)
fetchedResultsController.delegate=self
做{
请尝试fetchedResultsController.performFetch()
}抓住{
}

我不知道是什么原因导致错误发生,是否有人遇到过类似的问题并找到了解决方案?

您错过了FRC委托方法之一:
controller:didChangeSection:atIndex:forChangeType:
。有关委托方法,请参见。