Прокрутка таблицы к началу вызывает сбой - PullRequest
0 голосов
/ 14 февраля 2010

Я пробовал:

- (IBAction)openSearch {
[tblSimpleTable scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
[searchBar becomeFirstResponder];
}

и

- (IBAction)openSearch {
[self.tblSimpleTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
[searchBar becomeFirstResponder];
}

чтобы получить таблицу для прокрутки к вершине. Оба работают, когда таблица только слегка прокручена от вершины, но в противном случае происходит сбой с ошибкой «за пределами».

Любые идеи. Я довольно новичок в этом. Спасибо.

- Edit -

Спасибо за отзыв. Вот точная ошибка

2010-02-15 00:49:02.010 MyApp [2935:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'
2010-02-15 00:49:02.016 MyApp [2935:207] Stack: (
861696817,
860329709,
861252493,
861252395,
845801683,
845954223,
30161,
835250561,
835249847,
834989551,
834983899,
834971003,
805539851,
805539363,
805538115,
805537449,
805560369,
861158231,
861448761,
861447005,
861059891,
861060063,
834770799,
834765939,
10065,
9980
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.

У меня не возникает этой проблемы при прокрутке вручную. Таблица заполняется из NSMutableArray. Помогает ли это вообще?

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Ни один из них сам по себе не вызовет сбой, поэтому ваш сбой является побочным эффектом прокрутки, а не прямым результатом вставленного вами кода. Это поможет узнать точную ошибку, которую вы видите, но вероятной причиной является то, что у вас есть NSArray, и вы пытаетесь получить элемент с индексом, слишком большим для него (или, возможно, отрицательным). Вполне вероятно, что один из методов делегата табличного представления или источника данных является прямой причиной сбоя, и прокрутка имеет значение только потому, что она приводит к появлению ошибки там.

0 голосов
/ 15 февраля 2010

Возможно, немного выдумки, но это сработает, если я сначала очищу стол:

searching=YES;
[tblSimpleTable reloadData];
[tblSimpleTable scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

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

В любом случае - для людей с такой же проблемой: перезагрузите таблицу с пустым массивом, прокрутите вверх, снова перезагрузите таблицу со старым массивом. Надеюсь это поможет. Может быть, кто-нибудь придумает лучший способ сделать это.

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