2014-09-12 2 views
1

UITableViewCellUIImageView이 있습니다. 볼 이미지가 없으면 사라지고 싶습니다. 이 코드 구현했습니다 : 셀에 잘못된 이미지,UITableViewCell의 UIImageView를 비우는 방법

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ((item.content_image != nil) && (item.content_image != (id)[NSNull null])) 
    { 
     [cell.imageContentImage setImageWithURL:[NSURL item.content_image]] ; 
    } 
    else 
    { 
     cell.imageContentImage = nil; 
    } 
} 

내가 한 사용자로부터 보고서를 얻었다을 (다른 세포에서 이미지를 복제하는 것 같다).

문제는 내 질문에 이론적 켜져 그래서, 시뮬레이터 또는 내가 그것을 디버깅 할 수있는 장치에서 발생하지 않는다는 것입니다 :

갈 수있는 올바른 방법이다 UIImageViewnil 할당되어 있습니까? 거기에 "더 정확한"방법이 있습니까?

+0

게시 된 코드는 어떤 방법으로 전송됩니까? – rmaddy

+0

cellForRowAtIndexPath. 코드를 편집 ... – Boaz

+0

먼저, 확실히 imageView의 이미지를 nil로 설정하고 imageView 자체는 설정하지 않습니다. 세포를 재사용하면 예기치 않은 행동을 할 수 있습니다. – streem

답변

1

여기에 몇 가지 문제가 있습니다.

if(item.content_image && ![item.content_image isEqual:[NSNull null]]) {} 

둘째, 중복 된 이미지를 볼 수있는 이유는 당신이 아니므로한다 : 나는 당신을 위해 무엇을 찾고있는 것은 더 같은 것을 생각하면 먼저 유형 NSNull의 개체에 대한 포인터 비교를하고있는 매번 새로운 셀을 할당하면, 당신은 dequeing 오래된 것들이 남아있는 재사용 가능한 셀입니다. 가장 쉬운 방법은 이미지보기의 이미지 속성을 즉시 nil 밖으로 가져온 다음 이미지가있을 경우에만 이미지를 할당하는 것입니다.

cell.imageContentImage.image = nil; 
if(item.content_image && ![item.content_image isEqual:[NSNull null]]) 
{ 
    [cell.imageContentImage setImageWithURL:[NSURL urlWithString:item.content_image]]; 
} 
+0

그래서 이미지가 없거나 전체 UIImageView가 0이 아닌 경우의 차이점은 무엇입니까? – Boaz

+0

UIImageView의 이미지 속성을 'nil'으로 설정하면 이미지가 제거되지만 이미지보기 (또는 이미지보기의 포인터는 작성된 방법에 따라 다름)가 삭제되지 않습니다. 이러한 셀은 재사용이 가능하므로 비파괴적인 것이므로 아무 것도하지 않고 다른 데이터의 큐에서 다시 꺼내면 셀을 유효하지 않은 상태로 남기지 않습니다. –

0

이 경우 ELSE 블록에 코드를 작성하고 싶지 않을 것 같습니다. UIImageView를 숨기려면이 방법이 더 좋습니다.

imageView.hidden = YES; 
1

UIImageView에 대한 UIImage 속성에 nil을 할당하는 것은 완벽합니다. 아마도 셀에 잘못된 이미지 (복제 된 이미지)가 보이면 캐시 된 것입니까? 가장 안전한 방법은 cellForRowAtIndexPath() 메서드에서 셀의 큐를 dequeuing하여 셀의 이미지를 항상 nil로 설정 한 다음 적절한 경우 이미지를 할당하는 것입니다. "복제본"을 얻는 유일한 방법은 데이터에 문제가있는 경우입니다.

관련 문제