Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: '*** - [NSMutableArray objectAtIndex:]: индекс 1 за пределами [0 .. 0]' - PullRequest
4 голосов
/ 10 ноября 2010

Я получаю следующие ошибки, очень новые для iphone dev и задачи C. Я очень хочу отправить свой проект, чтобы кто-то посмотрел, я бегаю кругами и понятия не имею, что делать рядом!

2010-11-10 19:38:07.822 iShisha[2698:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** Call stack at first throw:
(
 0   CoreFoundation                      0x025f9b99 __exceptionPreprocess + 185
 1   libobjc.A.dylib                     0x0274940e objc_exception_throw + 47
 2   CoreFoundation                      0x025ef695 -[__NSArrayM objectAtIndex:] + 261
 3   iShisha                             0x00003dc5 -[MapViewController tableView:cellForRowAtIndexPath:] + 1262
 4   UIKit                               0x0032dd6f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 619
 5   UIKit                               0x00323e02 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
 6   UIKit                               0x00338774 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
 7   UIKit                               0x003307ec -[UITableView layoutSubviews] + 242
 8   QuartzCore                          0x046d7481 -[CALayer layoutSublayers] + 177
 9   QuartzCore                          0x046d71b1 CALayerLayoutIfNeeded + 220
 10  QuartzCore                          0x046d02e0 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 302
 11  QuartzCore                          0x046d0040 _ZN2CA11Transaction6commitEv + 292
 12  QuartzCore                          0x04700ebb _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
 13  CoreFoundation                      0x025daf4b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
 14  CoreFoundation                      0x0256fb27 __CFRunLoopDoObservers + 295
 15  CoreFoundation                      0x02538ce7 __CFRunLoopRun + 1575
 16  CoreFoundation                      0x02538350 CFRunLoopRunSpecific + 208
 17  CoreFoundation                      0x02538271 CFRunLoopRunInMode + 97
 18  GraphicsServices                    0x02ed800c GSEventRunModal + 217
 19  GraphicsServices                    0x02ed80d1 GSEventRun + 115
 20  UIKit                               0x002caaf2 UIApplicationMain + 1160
 21  iShisha                             0x00001de8 main + 102
 22  iShisha                             0x00001d79 start + 53
)
terminate called after throwing an instance of 'NSException'

[Session started at 2010-11-10 19:38:15 +0000.]
Pending breakpoint 1 - ""MapViewController.m":204" resolved
Pending breakpoint 2 - ""MapViewController.m":317" resolved
Pending breakpoint 3 - "objc_exception_throw" resolved
(gdb) 

Ответы [ 2 ]

10 голосов
/ 10 ноября 2010

В CocoaTouch у таблиц есть делегат и источник данных. Делегат отправляет и получает сообщения для табличного представления, а источник данных контролирует информацию, которая содержится в таблице, а также верхние и нижние колонтитулы таблицы. Источник данных сообщает таблице, сколько строк нарисовать, сколько разделов, что поместить в заголовки разделов и так далее.

Табличное представление запрашивает источник данных о том, сколько строк нарисовать через

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

метод. Затем в

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

метод, tableView запрашивает ячейку для заполнения таблицы из источника данных. При программировании для iPhone таблицы в основном заполняются массивом, единственной переменной (объектом), которая содержит много других переменных (объектов). Вы говорите массиву, какой объект вы хотите, спрашивая

object = [array objectAtIndex:INTEGER]; //where INTEGER is an unsigned (zero or greater, no minus)

что случилось, так это то, что ваш источник данных ожидает X числа объектов для таблицы и имеется X-Y. Если он считает, что их 10, а их только 9, когда таблица запрашивает 10-й объект, вы получаете сбой, потому что нет объекта, который можно дать.

посмотрите в своем коде строку hte

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

и посмотрите, что это за код. Скорее всего, вы предоставляете неверные данные.

Удачи

1 голос
/ 20 февраля 2012

Я не думаю, что для этого нужно менять статические ячейки на динамические (в некоторых случаях ячейки могут быть статичными).Возможно, причиной этой проблемы является то, что для представления таблицы в разделе «Инспектор атрибутов» раскадровки вы могли иметь только имена из 0 разделов.Все, что вам нужно сделать, это увеличить это число до 1 или столько разделов, сколько вам может понадобиться.

Что ж, я думаю, что это проблема @ styfle.

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