Полагаю, вы неправильно поняли концепцию идентификатора ячейки.Он используется только для того, чтобы отличить то, что вы могли бы назвать «штампами», используемыми для печати внешнего вида ячейки на экране.Таким образом, вам, скорее всего, потребуется только один идентификатор ячейки.
Это помогает системе кэшировать экземпляры «штампов».Когда вызывается cellForRowAtIndexPath
, вам нужно только выбрать, какую марку вы хотите использовать.Если вы создали экземпляр правильного экземпляра ранее (т.е. вы получаете его обратно, когда запрашиваете его, используя строку идентификатора ячейки), вам нужно только изменить текст метки и т. Д., А затем вернуть его.В реальной жизни это можно сравнить с одной из тех марок даты, где вы можете изменить дату, поворачивая маленькие ручки на марке.Это то, что вы бы сделали, назначив новый текст метке, содержащейся в ячейке.
Вместо этого вы, похоже, создаете штамп для каждого индекса в вашей модели, объединяя строковое значение, эффективно создавая столько экземпляровкак есть строки в вашей модели.Помимо того, что в этом нет необходимости, он также может вызывать нехватку памяти и заикание, потому что он противодействует всевозможным оптимизациям, которые имеет UITableView.
Я рекомендую прочитать документацию Apple или посмотреть iTunes U ( здесь ) для Стэнфордских курсов по разработке iOS.Там это объясняется очень четко.