Я думаю, что у вас сбой, потому что вы пытаетесь получить доступ к ячейкам в табличном представлении, которых там нет.
Независимо от того, какова длина логической таблицы, визуальное представление таблицы содержит только достаточное количество ячеек для отображения раздела логической таблицы, отображаемой в данный момент на экране. При размере строки по умолчанию таблица показывает и, следовательно, содержит только от 9 до 10 объектов ячеек. Например, если у вас есть логическая таблица длиной 100 строк, и в вашем представлении отображаются строки 11-20, в таблице есть только 9 ячеек. Если вы показываете строки 89-98, он имеет только точно такие же 9 объектов ячеек. Независимо от того, какие строки вы отображаете, вы снова и снова видите одни и те же 9 ячеек. Единственное, что меняется, это данные, которые они отображают.
Если вы попытаетесь получить доступ к ячейке для логического ряда за пределами экрана, вы ничего не получите обратно. В вашем случае вы пытаетесь получить доступ к 11-й логической строке, но 11-й ячейки нет и никогда не будет.
Я думаю, у вас есть некоторая концептуальная путаница, потому что вы пытаетесь сохранить данные в самой таблице, устанавливая содержимое ячейки. Это не будет работать, потому что табличные представления не хранят никаких данных сверх того, что немедленно отображается. Когда при просмотре таблицы необходимо отображать больше строк, она повторно использует существующую ячейку, а ее делегат DataSource изменяет данные, отображаемые в существующих ячейках.
Вместо того, чтобы хранить изображения в ячейках, вам нужно создать модель данных и хранить там изображения. Затем, когда прокручивается таблица, она отправляет tableview:cellForRowAtIndexPath:
своему делегату источника данных. Затем делегат источника данных запросит у модели данных данные для логической строки, заполнит повторно использованную ячейку и вернет ее в табличное представление.