Вы добавляете данные из каждого загруженного изображения в один и тот же объект данных.Таким образом, в лучшем случае объект данных заканчивается данными для изображения # 1, за которыми сразу же следуют данные для изображения # 2 и т. Д .;декодер изображения, по-видимому, берет первое изображение в порции данных и игнорирует мусор после.Вы также, кажется, не знаете, что NSURLConnections 'connection:didReceiveData:
не обязательно будет вызываться в том порядке, в котором были установлены подключения, что connection:didReceiveData:
можно вызывать ноль или несколько раз для каждого подключения (и, вероятно, будет, если ваши изображения большенесколько кибибайт), и что tableView:cellForRowAtIndexPath:
не гарантированно будет вызываться для каждой ячейки в таблице по порядку.Все это полностью испортит ваш массив _cellImages
.
Чтобы сделать это правильно, вам нужно иметь отдельный экземпляр NSMutableData для каждого соединения и добавить его в свой массив _cellImages
только один раз и с правильным индексом для строки, а не с произвольным следующим доступным индексом.И затем в connection:didReceiveData:
вам нужно выяснить правильный экземпляр NSMutableData для добавления;это можно сделать, используя объект соединения (обернутый в NSValue, используя valueWithNonretainedObject:
) в качестве ключа в NSMutableDictionary, или используя objc_setAssociatedObject
, чтобы присоединить объект данных к объекту соединения, или создав себе класс, который обрабатывает всеуправление NSURLConnection для вас и вручает вам объект данных, когда завершено.