将行插入其他段时发生核心数据错误

时间:2019-06-03 08:42:08

标签: ios swift uitableview core-data nsfetchedresultscontroller

我有一张桌子,桌子分为两个部分,分别用于上午和晚上的课程。我正在获取早班和晚班的数据,并将其附加到以下变量

   var morClasses = [String]()
   var eveClasses = [String]()

然后,我将它们显示如下,

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var partOfDay = 0
        switch (segView.selectedSegmentIndex)
        {
        case 0:
            partOfDay = morClasses.count
            break
        case 1:
            partOfDay = eveClasses.count
            break
        default:break
        }
        return partOfDay
    }


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell1 = tableView.dequeueReusableCell(withIdentifier: "tableViewCell") as! TableViewCell
    let cell2 = tableView.dequeueReusableCell(withIdentifier: "tableViewCellEve") as! TableViewCellEve

    switch (segView.selectedSegmentIndex)
    {
    case 0:
        cell1.label?.text  = morClasses[indexPath.row]

    case 1:
        cell2.label?.text  = eveClasses[indexPath.row]
        return cell2
    default: break
    }
    return cell1
    }

我正在使用FRC如下插入它们,

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
case NSFetchedResultsChangeType.insert:

    var indexPathToInsert = IndexPath(row: newIndexPath!.row, section: 0)
    let classDetailInsert  = fetchedResultsController.object(at: indexPathToInsert) as! ClassDetail
    let numbers = classDetailInsert.dayPart
    let containsMor = numbers!.contains(where: { $0 == 0 })
    let containsEve = numbers!.contains(where: { $0 == 1 })

    var rowToInsert = 0
    var rowToInsertEve = 0

    if (containsMor == true)
    {
        //if-else condition because count is updating N-1 late
        if (morClasses.count >= 1)
        {
            rowToInsert = morClasses.count
        }
        else
        {
            rowToInsert = 0
        }
        indexPathToInsert = IndexPath(row:rowToInsert, section: 0)
        morClasses.insert(classDetailInsert.title!, at: indexPathToInsert.row)
    }

    if (containsEve == true)
    {
        if (eveClasses.count >= 1)
        {
            rowToInsertEve = eveClasses.count
        }
        else
        {
            rowToInsertEve = 0
        }
        indexPathToInsert = IndexPath(row:rowToInsertEve, section: 0)
        eveClasses.insert(classDetailInsert.title!, at: indexPathToInsert.row)
    }
    self.tableView.insertRows(at: [indexPathToInsert], with: .fade)

只要我在一个网段中插入数据,一切都可以正常工作,但是如果我添加与另一网段有关的数据,则会出现以下错误。那就是我可以继续添加上午课程而没有任何错误,但是一旦添加了晚上课程,就会出现以下错误。

  

CoreData:故障:严重的应用程序错误。捕获到异常   在调用NSFetchedResultsController的过程中从   -controllerDidChangeContent :。无效的更新:部分0中的行数无效。现有部分中包含的行数   更新(1)之后必须等于   更新前的那部分(1),加上或减去行数   从该部分插入或删除(已插入1个,已删除0个),再加上   或减去移入或移出该部分的行数(移入0   进入,0移出)。与userInfo(空)

我不知道我在哪里搞砸,对此方向的任何帮助将不胜感激。

0 个答案:

没有答案