У меня есть стол с двумя сегментами для утренних и вечерних занятий. Я собираю данные для утренних и вечерних занятий и добавляю их к следующим переменным
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)
Я не знаю, где я облажаюсь, любая помощь в этом направлении будет признательна.