Ошибка основных данных при вставке строки в другой сегмент - PullRequest
0 голосов
/ 03 июня 2019

У меня есть стол с двумя сегментами для утренних и вечерних занятий. Я собираю данные для утренних и вечерних занятий и добавляю их к следующим переменным

   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 переехал). with userInfo (null)

Я не знаю, где я облажаюсь, любая помощь в этом направлении будет признательна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...