2013-07-03 3 views
1

Я знаю, что это широко обсуждалось ранее, и я уверен, что я просто что-то пропустил просто, но, как и многие другие, передо мной, у меня проблема с повторным использованием ячеек в 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, пока не будет загружено правильное изображение?

+0

Вы установили точку прерывания или трассировку через это? «WaitCell» когда-либо «nil» после 'ожиданияCell = [tableView dequeueReusableCellWithIdentifier:'? –

+0

Что такоеКелл? Где и как вы это определяете? – rdelmar

+0

rdelmar, а моя ошибка, это была просто ошибка C & P, так как у меня есть еще одна ячейка, названная так позже, и я взял неправильный C & P там - но он правильно назвал waitCell в моем коде :) также отредактировал код выше ... Marcus, все строки равны нулю, когда они впервые встречаются, но я начинаю ощущать, что проблема может быть связана с моим кэшированием, а не с повторным использованием ячеек, поскольку при установке временного изображения ячейки являются нулевыми (если это делает смысл вам) – user969043

ответ

0

Итак, я нашел другой метод, чем тот, который я использую в настоящее время ... Основная проблема заключалась в том, что, когда я использую вспомогательный сервис Parse, мне пришлось сначала загрузить некоторую другую информацию, прежде чем я смог получить доступ к самому файлу, который, по-видимому, вызвал какое-то странное повторное использование изображений, поэтому я нашел способ подкласса UITableViewCell в API, который, кажется, помогает ...