2015-10-20 3 views
0

У меня есть табличный вид, который имеет контроллер сегмента и имеет два сегмента категории 1 и 2 соответственно. Когда я добавляю элемент в категорию 1, он отлично выполняется, но когда я добавляю элемент в категорию 2, он выдает сообщение о том, что «Завершение приложения из-за неотображенного исключения» NSInternalInconsistencyException », причина:« попытаться вставить строку 0 в раздел 0, но в разделе 0 после обновления есть только 0 строк. Вот его мой код для вставки в представление таблицы.UISegmentController с UITableviewController

Для категории 1:

func itemDetailViewController(controller: ItemDetailViewController, didFinishAddingItem item: NoToDoItem) { 
    let newRowIndex = items.count 

    items.append(item) 

    let indexPath = NSIndexPath(forRow: newRowIndex, inSection: 0) 
    let indexPaths = [indexPath] 
    tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic) 

    dismissViewControllerAnimated(true, completion: nil) 
} 

и 2 категории:

func itemDetailViewController(controller: ItemDetailViewController, didFinishAddingNotSureItem notSureItem: NotSureItem) { 
    let newRowIndex = notSureItems.count 

    notSureItems.append(notSureItem) 

    let indexPath = NSIndexPath(forRow: newRowIndex, inSection: 0) 
    let indexPaths = [indexPath] 
    tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic) 

    dismissViewControllerAnimated(true, completion: nil) 
} 
+0

А как насчет другого кода, в котором вы создаете экземпляры и используете их для заполнения табличных представлений? – Wain

+0

http://paste.ubuntu.com/12874960/. Вот его мой другой код @Wain –

+0

Похоже, вы не заселяете массив dataSource для таблицы второй категории. Отлаживали ли вы точки останова в методах делегатов? –

ответ

1

У вас есть в вашей таблице та же самая категория, к которой вы сейчас добавляете? Попробуйте следующее:

func itemDetailViewController(controller: ItemDetailViewController, didFinishAddingItem item: NoToDoItem) { 
    let newRowIndex = items.count 

    items.append(item) 
    if segmentBar.selectedSegmentIndex == 0 { 
     let indexPath = NSIndexPath(forRow: newRowIndex, inSection: 0) 
     let indexPaths = [indexPath] 
     tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic) 
    } 
    dismissViewControllerAnimated(true, completion: nil) 
} 

и сделать то же самое для didFinishAddingNotSureItem.

Также убедитесь, что вы перезагрузите табличное представление при изменении категории.

+0

, когда я выбираю категорию 1, добавляя элемент, но когда я выбираю категорию 2, ее не появляется в индексе сегмента 1 @replman –

+0

Добавить точку останова в didFinishAddingItem и didFinishAddingNotSureItem. Затем вставьте элемент в категорию 2. Когда отладчик останавливается, убедитесь, что он находится в основном потоке. Затем введите «po segmentBar.selectedSegmentIndex» в консоль и убедитесь, что она возвращает категорию 2. – liefersfl

+0

Он ничего не возвращает @replman –

0

UITableView должны храниться в синхронизации с источником данных в любое время. Особое внимание должно быть уделено, если источник данных может измениться в фоновом потоке.

Когда что-то добавлено в источник данных, вызовите beginUpdate/insert/endUpdate как можно скорее. Так что попробуйте это:

tableView.beginUpdates() 

let indexPath = NSIndexPath(forRow: newRowIndex, inSection: 0) 
let indexPaths = [indexPath] 
tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic) 

tableView.endUpdates() 

PS: Доверяя ваш DataSource модель объекта notSureItems установлен правильно и что numberOfRowsInSection функция возвращает правильное количество.

EDIT: сообщение OP комментарии

Вы пытаетесь добавить строку в неправильном индексе. просмотр таблицы индексы начинаются с 0, так это то, как вы должны вывести свой новый индекс клеток:

notSureItems.append(notSureItem) 
let newRowIndex = notSureItems.count - 1 

Кроме того, поставить точку останова в ваших itemDetailViewController и numberOfRowsInSection функций для проверки значений модели.

+0

Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после update (1) должно быть равно количеству строк, содержащихся в этом разделе, перед обновлением (1), плюс или минус количество строк, вставленных или удаленных из этого раздела (1 вставлено, 0 удалено) и плюс или минус количество строки, перемещенные в или из этой секции (0 перемещено, 0 перемещено). ' Теперь он показывает этот сбой @Abhinav –

+0

Для вашей информации я создал контроллер предупреждения, который имеет категории действий 1 и 2 соответственно. Когда я выбираю одну из этих категорий, она должна быть внутри того сегмента, который я создал. Вышеупомянутый отредактированный ответ также снова дает мне такой же крах. –

+0

Что это значит.Я в тупике! – Abhinav

Смежные вопросы