2013-07-03 4 views
1

이전에 널리 논의 된 사실을 알고 있습니다. 간단히 말해서 뭔가 빠졌지 만 다른 많은 사람들처럼 나를 재사용 할 수있는 문제가 있습니다. 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를 사용하십시오.

+0

중단 점을 설정 했습니까? 추적 했습니까? 'waitingCell'은'waitingCell = [tableView dequeueReusableCellWithIdentifier :'?] 뒤에 항상 nil입니까? –

+0

완성 된 셀은 무엇입니까? 어디에서 어떻게 정의합니까? – rdelmar

+0

rdelmar, 오, 내 실수, 그게 나중에 다른 세포라는 이름의 C & P 오류가 있었는데 거기에 잘못된 C & P를 가져갔습니다 -하지만 올바르게 위 코드에서 편집 한 waitingCell :) 코드를 편집했습니다 ... Marcus, 모든 행은 처음 발생할 때 nil이지만, 임시 이미지를 설정할 때 셀이 0이기 때문에 문제가 셀 재사용이 아닌 캐싱과 함께 있을지도 모른다고 느끼기 시작했습니다. (너에게 감각) – user969043

답변

0

좋아, 그래서 내가 현재 사용하고있는 것보다 다른 방법을 발견했다 ... 주요 문제는, 내가 백엔드 서비스 파스를 사용하고있을 때, 나는 다른 정보를 먼저 다운로드해야했다. 이미지의 이상한 재사용을 일으킨 것 같은 파일 자체에 대한 접근을 얻었습니다. 그래서 UITableViewCell을 API에서 서브 클래스 화하는 방법을 찾았습니다 ...