2014-09-30 1 views
0

У меня есть пользовательский UITableViewCell, который имеет данные, которые я получаю с сервера. Я устанавливаю reuseIdentifier ячейки, когда поступают данные. Все работает нормально, пока я не сработаю, чтобы обновить и получить новые/обновленные данные. Идентификатор с сервера тот же, но данные могут быть разными (это ожидаемый результат в этом случае). Когда это произойдет, мне нужно заново создать ячейки и сохранить один и тот же идентификатор повторного использования. Я знаю, что не устанавливать reuseIdentifier - это один из способов обойти это, но это очень плохая идея, которая ущемляет производительность.Objective-c Удаление повторного использованияИдентификатор из UITableViewCell

Я рассмотрел множество вопросов, связанных с использованием reuseIdentifier, но ни один из них не смог ответить на мой вопрос.

Благодарим вас за понимание!

+0

Я не думаю, что вы понимаете, как это должно работать. Идентификатор повторного использования идентифицирует конкретный способ инициализации ячейки (например, установка цвета фона, добавление метки и т. Д.), Так что, если вы удалите один из них с этим идентификатором, вам не нужно повторять инициализацию. –

+1

Для простой таблицы, когда все строки отформатированы одинаково, одно значение reuseIdentifier используется для всего. –

+0

Я знаю, что идентификатор повторного использования идентифицирует конкретный способ идентификации ячейки. В моем случае каждая ячейка уникально создана на основе информации, которую я получаю с сервера. Поэтому, когда я прокручиваю нижнюю часть и создаю резервную копию, я получаю правильную ячейку, потому что параметр reuseIdentifier установлен, и мне не нужно его инициализировать. Когда я снимусь для обновления, данные для ячейки «x» могут измениться, и как настроены мои ячейки, мне нужно воссоздать ячейку. –

ответ

2

Нет необходимости очищать идентификатор повторного использования. Просто обновите представление таблицы после настройки новых данных. Все видимые ячейки будут перезагружены. Использование одного и того же reuseIdentifier в порядке. Пока ваш метод cellForRowAtIndexPath использует новые данные для заполнения каждой ячейки, вы получите желаемые результаты.

Обновление - комментарий mkral - хорошее разъяснение. ReuseIdentifier представляет тип ячейки, а не данные. Таким образом, reuseIdentifier не должен иметь ничего общего с идентификатором с сервера, если только идентификатор сервера не влияет на тип отображаемых ячеек.

+0

Чтобы добавить к этому, 'reuseIdentifier' предназначен для идентификации различных типов ячеек. Поэтому, если у вас есть только один тип ячеек, он проверяет, может ли он повторно использовать другую ячейку с тем же идентификатором, который больше не используется (за пределами экрана), поэтому он не создает 1000 экземпляров UITableViewCell для 1000 записей. Это создало бы +/- количество ячеек, которые могут быть видны для просмотра таблицы и повторно использовать невидимые, когда вы прокручиваете – mkral

+0

Каждая ячейка, которая у меня есть, уникально создана на основе информации о сервере, когда я инициализирую ячейку, я запустите его с данными с сервера. Когда вызывается запрос на перезагрузку, представление таблицы деактивирует ячейку, и изменения не отображаются, потому что вызов init не вызван. –

+1

Вам необходимо обновить свой вопрос с помощью метода 'cellForRowAtIndexPath'. BTW - данные не должны передаваться методу 'init ...' ячейки. Ячейка снова используется. Вы должны иметь возможность обновлять данные ячейки после вызова 'init'. – rmaddy