2010-02-20 2 views
0

Что может вызвать это?Сгруппированные UITableView отображаются нормально, но только один раз

У меня есть сгруппированный tableView, который я добавил в IB. 2 группы. 3 строки в каждой группе.

Он отображается нормально, когда приложение запускается в первый раз. (Итак, я знаю, что я правильно делаю это. Не означает ли это, что я (по крайней мере) правильно настроил мой делегат, DataSource, IBOutlets и соединения?)

Но когда я нажимаю кнопку, которая вызывает [myTable reloadData] он просто падает.

Первоначально я думал, что это связано с моими изменениями в количестве групп, количеством строк или изменением данных в моем источнике данных (всего лишь NSMutableArray).

Но то же самое происходит, когда я изменяю данные NO: Работает нормально при первом отображении таблицы. Но сбой, когда я звоню [myTable reloadData]. (Независимо от того, изменились данные или нет.)

Я удалил свой код до минимума на баребонах ... пытаясь найти эту ошибку.

 

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIndentifer = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifer]; 

    if(cell == nil) 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifer] autorelease]; 

    cell.textLabel.text = @"Left Test"; 
    cell.detailTextLabel.text = @"Right Test"; 

    return cell; 
} 

Вот код кнопки-клик:

 
-(IBAction) reloadTable:(id)sender 
{ 
    if(myTable == nil) 
     NSLog(@"myTable is nil"); 
    else 
     [myTable reloadData]; 
} 

Вот "ошибка" (без помощи на всех):

 
[Session started at 2010-02-19 10:04:14 -0100.] 
GNU gdb 6.3.50-20050815 (Apple version gdb-967) (Tue Jul 14 02:11:58 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "i386-apple-darwin".sharedlibrary apply-load-rules all 
Attaching to process 1081. 
kill 
kill 
quit 

The Debugger has exited with status 0.(gdb) 

Я даже пытался жесткого кодирования " количество групп "," количество строк "," текст заголовка "," текст в ноге "и" текст ячейки ". (В случае, если моя математика ошибочно вычисляла мой объектAtIndex ... или у меня был массив-dataSource, у которого не было достаточного количества элементов.)

Всегда та же проблема: отображается в первый раз. Сбой при попытке перезагрузкиДата.

+1

Показать метод нажатия кнопки и получить точную ошибку. – DyingCactus

+0

 -(IBAction) reloadTable:(id)sender { \t if(myTable == nil) \t \t NSLog(@"myTable is nil"); \t else \t \t [myTable reloadData]; } 
Susanna

+0

StackOverFlow: * ПОЖАЛУЙСТА * прекратите переформатирование моих комментариев. * ПОЖАЛУЙСТА * прекратите запрещать html в комментариях. * ПОЖАЛУЙСТА * прекратите ограничивать мои комментарии «крайне короткими». Ugh. – Susanna

ответ

0

Ну, если myTable нет, но табличное представление находится на экране, то это довольно хороший индикатор, что у вас нет нужного IBOutlet. Держу пари, если вы NSLog(@"%@", myTable); в viewDidLoad (после того, как позвоните супер, конечно), вы увидите, что (null) зашел на консоль.

При первом загрузке UITableViewController табличное представление (доступно через [self tableView]) будет reloadData, поэтому он работает один раз, но не перезагружается снова (потому что ваша розетка не подключена).

Я бы полностью отключил выход (если вы не используете UITableViewController) и используйте [self tableView].

+0

Я перезагрузился. Я сделал «чистую сборку». Отключил розетку myTable ... затем снова подключил его. Проблема продолжается. Не было бы моего кода «if (myTable == nil) ... внутри моего метода нажатия кнопки ... предотвратить любые проблемы« myTable может быть нуль »? My NSLog() call in viewDidLoad дает: viewDidLoad (>) Что еще я должен попробовать? – Susanna

+0

Является ли исходный код выделения ячеек правильным? Должна ли «ячейка повторного использования» автореализоваться или нет? Должен ли «создать новую ячейку» автореализоваться или нет? – Susanna

+0

Даже если myTable WAS nil (это не так) ... не было бы все равно быть абсолютно безвредным для вызова [myTable reloadData]? Это заставит tableView ничего не делать. Вместо этого я получаю мгновенный сбой. – Bonnie