이전에 널리 논의 된 사실을 알고 있습니다. 간단히 말해서 뭔가 빠졌지 만 다른 많은 사람들처럼 나를 재사용 할 수있는 문제가 있습니다. UITableView ... 아바타를 표시하는 버튼이 있는데 비동기 적으로 처음 다운로드 한 다음 나중에 사용하기 위해 캐시합니다 ... 이미지를 처음 다운로드하는 동안 내 tableview에서 스크롤하면 , cellForRowAtIndexPath에서iOS : UITableViewCell 재사용, 버튼 변경 이미지
... 나는 다운로드를 시작하기 전에 기본 아바타에 아바타를 설정하고있어 그에도 불구하고 아바타, 재사용되는 세포에서 부당 표시, 그래서 나는 해결책을 알 수 여기에 누군가를 바라고 있어요 :
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는 상수 파일 이름)으로 설정하면 기본 아바타를 설정합니다
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];
어떤 아이디어를 내가 재사용 이미지에서 그것을 유지하는 방법 : 다른 다운로드되었고,이 때문에
버튼이 내 사용자 정의에 정의되어 있습니다 .. 다른 이미지를 다시 사용하지 않을 때까지있는 UITableViewCell 같은 WaitingCell라고 올바른 이미지가 다운로드 될 때까지 단순히 DefaultAvatar를 사용하십시오.
중단 점을 설정 했습니까? 추적 했습니까? 'waitingCell'은'waitingCell = [tableView dequeueReusableCellWithIdentifier :'?] 뒤에 항상 nil입니까? –
완성 된 셀은 무엇입니까? 어디에서 어떻게 정의합니까? – rdelmar
rdelmar, 오, 내 실수, 그게 나중에 다른 세포라는 이름의 C & P 오류가 있었는데 거기에 잘못된 C & P를 가져갔습니다 -하지만 올바르게 위 코드에서 편집 한 waitingCell :) 코드를 편집했습니다 ... Marcus, 모든 행은 처음 발생할 때 nil이지만, 임시 이미지를 설정할 때 셀이 0이기 때문에 문제가 셀 재사용이 아닌 캐싱과 함께 있을지도 모른다고 느끼기 시작했습니다. (너에게 감각) – user969043