3

У меня возникли проблемы с боковой панелью в этом приложении (в котором используется Storyboard), над которым я работаю. Боковая панель - UITableViewController, и я хочу, чтобы панель поиска сверху, поэтому я положил объект Search Bar and Search Display Controller в Раскадровка. У меня есть содержимое боковой панели в 5 статических ячейках, а панель поиска выполняет поиск в удаленной базе данных для получения результатов.iOS - Использование UISearchDisplayController на UITableViewController со статическими ячейками

Моя проблема заключается в том, что если мои результаты поиска содержат более 5 элементов, я получаю следующее сообщение об ошибке:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 5 beyond bounds [0 .. 4]' 

Я не совсем уверен, что происходит за кулисами, но я абсолютно уверен, что несмотря на наличие следующего кода, количество строк, заданных для секции просмотра таблицы в Storyboard (5), переопределяет все.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     return [[self filteredCappegoryArray] count]; 
    } else { 
     return [super tableView:tableView numberOfRowsInSection:0]; 
    } 
} 

Я хотел бы перейти на боковую панель, чтобы использовать динамические клетки, но один из моих клеток содержит вид контейнера, и XCode не позволяет мне иметь вид контейнера в ячейке прототипа. Мне было интересно, есть ли какие-то варианты, над которыми я должен работать над этой проблемой.

ответ

2

мне удалось решить ошибку с помощью коллега. Уделив больше внимания стеку вызовов, мы поняли, что приложение рушилось в методе данных (индекс 3).

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 5 beyond bounds [0 .. 4]' 
*** First throw call stack: 
(
0 CoreFoundation      0x000000010188c795 __exceptionPreprocess + 165 
1 libobjc.A.dylib      0x00000001015ef991 objc_exception_throw + 43 
2 CoreFoundation      0x000000010184502f -[__NSArrayI objectAtIndex:] + 175 
3 UIKit        0x00000001006d97df -[UITableViewDataSource tableView:indentationLevelForRowAtIndexPath:] + 115 
4 UIKit        0x0000000100318a08 __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1574 
5 UIKit        0x00000001002a60ac +[UIView(Animation) performWithoutAnimation:] + 70 
[...] 

Итак, я добавил это, и результаты покажутся отлично.

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 0; 
} 

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

+0

Эй, очень рад, что вы опубликовали это исправление 'indentationLevelForRowAtIndexPath'. Я отлаживал часами. –

+0

Большое спасибо за публикацию решения для этого. У меня была такая же проблема, и у меня было пару часов, отлаживающих проблему. Снова спасибо! – Guerrix

0

Вы можете переопределить:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

И возвращают обычай UITableViewCell в некоторых случаях и вызвать super в других, так же, как вы перекрываться numberOfRowsInSection

+0

Да, я уже это делаю. Ячейки отображаются правильно, единственная проблема заключается в том, что в представлении таблицы не разрешено указывать больше ячеек, чем число, установленное в настройках раскадровки. – kevin

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