Ошибка получения индекса 0 за пределами пустого массива для непустого массива - PullRequest
4 голосов
/ 01 октября 2011

У меня есть этот код для добавления строки в табличное представление в контроллере корневого представления моего приложения:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

NSArray *myArray = [NSArray arrayWithObject:indexPath];

NSLog(@"count:%d", [myArray count]);

[self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade];

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Когда он запускается с помощью симулятора, я получаю следующий вывод:

count: 1
* Завершение работы приложения из-за необработанного исключения 'NSRangeException', причина: '* - [NSMutableArray objectAtIndex:]: индекс 0 вне границ для пустого массива'

Это происходит в строке [self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade];, но оператор NSLog показывает, что NSArray, называемый myArray, не пуст.Я что-то пропустил?Кто-нибудь когда-нибудь сталкивался с этим раньше?

Ответы [ 2 ]

1 голос
/ 01 октября 2011

В строке перед оператором log вы создаете новый массив, который действителен только в области действия этого метода.Массив, который вы используете для методов источника данных табличного представления, отличается, поэтому количество объектов в этом массиве не имеет значения вообще, даже если он имеет (как я подозреваю) одно и то же имя.

0 голосов
/ 01 октября 2011

Вызов insertRowsAtIndexPaths инициирует вызов ваших методов делегирования / источника данных UITableViewController.Это сделано для того, чтобы UITableView мог получить данные для новой строки.Вам нужно вставить данные в модель данных и убедиться, что numberOfRowsInSection возвращает новое увеличенное значение.

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

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