2014-07-08 7 views
-2

일부 목적으로 선택된 색인 경로를 저장하려고합니다. 내가 인쇄됩니다 설명 다음 줄을 인쇄 할 노력하고있어 때 코드 아래 나는 cellForRowAtIndexpath:배열에 저장된 색인 경로가 다르게 동작합니다.

if ([_arrOfIndexPaths containsObject:indexPath]) { 
     [filterCell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     [filterCell.textLabel setFont:[UIFont boldSystemFontOfSize:filterCell.textLabel.font.pointSize]]; 
    } 

에서 실행 해요.

<__NSArrayM 0x91567d0>(
<NSIndexPath: 0x8e8b5b0> {length = 2, path = 0 - 0}, 
<NSIndexPath: 0x91559a0> {length = 2, path = 2 - 0} 
) 
Printing description of indexPath: 
<NSIndexPath: 0x91a8460> {length = 2, path = 0 - 0} 

어레이에서 사용할 수 없습니다 인스턴스 설명 0x91a8460를 참조하십시오. 그러나 여전히 조건이 성공했습니다. 어떤 사람이 어떻게 작동하는지 설명 해줄 수 있습니까? 미리 감사드립니다.

+2

'containsObject :'메소드에 대한 문서를 읽으십시오. 객체는'isEqual :'에 대한 호출과 비교됩니다. – rmaddy

답변

1

인스턴스 0x91a8460은 배열에 없지만 경로는 0-0입니다. containsObject:에 대한 비교는 개체 동일성이 아닌 isEqual에 의해 수행됩니다. 객체 ID 비교를 원하면 indexOfObjectIdenticalTo:을 사용하십시오.

1

제 생각에는 배열에 indexPath (s)을 저장하고 테이블 셀을 업데이트하는 데 이상적이지 않습니다. 거기에 모든 테이블 데이터가있는 사전 배열을 사용하는 것이 더 좋으며, 사용자 작업 후 isCheck과 같은 키를 추가하고 TRUE 또는 FALSE으로 설정할 수 있습니다.

또는

당신은 아직도 당신의 배열을 대신 (@"%d%d",indexpath.row, indexpath.section) 같은 문자열 조합을 만들어 비교 문자열로 사용 indexpath 더 나은 저장 할 수 있습니다.

희망이 있습니다.