Я знаю, что это широко обсуждалось ранее, и я уверен, что я просто что-то пропустил просто, но, как и многие другие, передо мной, у меня проблема с повторным использованием ячеек в a UITableView ... У меня есть кнопка, которая отображает аватар, и я асинхронно загружаю ее в первый раз, а затем кеширую ее для последующего использования ... Когда я просматриваю свое табличное представление во время загрузки изображений в первый раз , аватары появляются неправомерно в клетках быть повторно использованы, несмотря на то что я устанавливаю аватар к аватару умолчанию перед началом загрузки, поэтому я надеюсь, что кто-то здесь будет знать решение ...iOS: повторное использование UITableViewCell, изображение смены кнопок
в cellForRowAtIndexPath:
WaitingCell *waitingCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierWaiting];
if (waitingCell == nil) {
waitingCell = [[WaitingCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierWaiting];
waitingCell.delegate = self;
}
[waitingCell.userButton setImage:[UIImage imageNamed:DefaultAvatar] forState:UIControlStateNormal];
[waitingCell.usernameLabel setText:username];
[waitingCell.scoreLabel setText:score];
__block UIImage *img;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
if([p1.objectId isEqualToString:currentUser.objectId])
{
img = [profileImages getProfileImageForUser:[p2 objectId]];
waitingCell.user = p2;
} else
{
img = [profileImages getProfileImageForUser:[p1 objectId]];
waitingCell.user = p1;
}
dispatch_async(dispatch_get_main_queue(), ^{
[waitingCell.userButton setImage:img forState:UIControlStateNormal];
});
return waitingCell;
Образ «userButton» - это часть, которая используется повторно, пока изображение не будет полностью кэшировано, но я подумал, что, установив его по умолчанию (DefaultAvatar - это постоянное имя файла), он просто установит аватар по умолчанию пока другой не был загружен, и поэтому не будет повторно использовать другие изображения ..
кнопка определяется в моем обычае UITableViewCell называется WaitingCell как таковой:
self.userButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.userButton setImage:[UIImage imageNamed:PlaceholderAvatar] forState:UIControlStateNormal];
self.userButton.frame = CGRectMake(20, 8, 51, 54);
[self.contentView addSubview:self.userButton];
Любые идеи, как я могу держать его от многократного использования изображений и просто используйте DefaultAvatar, пока не будет загружено правильное изображение?
Вы установили точку прерывания или трассировку через это? «WaitCell» когда-либо «nil» после 'ожиданияCell = [tableView dequeueReusableCellWithIdentifier:'? –
Что такоеКелл? Где и как вы это определяете? – rdelmar
rdelmar, а моя ошибка, это была просто ошибка C & P, так как у меня есть еще одна ячейка, названная так позже, и я взял неправильный C & P там - но он правильно назвал waitCell в моем коде :) также отредактировал код выше ... Marcus, все строки равны нулю, когда они впервые встречаются, но я начинаю ощущать, что проблема может быть связана с моим кэшированием, а не с повторным использованием ячеек, поскольку при установке временного изображения ячейки являются нулевыми (если это делает смысл вам) – user969043