2014-01-26 10 views
0

NSTableColumn에 NSButtonCell (체크 박스)이있는 NSTableView가 있는데, NSButtonCell (체크 박스)을 사용하여 IBB에서 구성한 행이 추가 될 때마다 NSButtonCell의 새 인스턴스를 생성합니다. 다음의 코드 덩어리의 두 번째 NSLog은 0NSButtonCell 상태에 대해 궁금하다

NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]); 
[[self.tableView preparedCellAtColumn:0 row:0]setState:1]; 
NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]); 

, 오른쪽 0 I 오전이 NSButtonCell의 인스턴스에 메시지를 보내는 것을 의미 반환 사실을 반환하는 이유 그러나, 나는 궁금 하군요? 그렇다면 왜 setState : 두 번째 NSLog의 반환 값을 변경하지 않습니까? 이 nil를 수신 한 경우

답변

0

그것은 또한 당신이 실제로 테이블보기에서 유효한 세포 개체를 받고 확인이

NSLog(@"cell:%@", [self.tableView preparedCellAtColumn:0 row:0]) 

를 시도 제안, 0를 인쇄 할 것이다.

여기서 코드를 어디에서 불러들입니까? 테이블이 이미 표시된 후에? 초기화하는 동안?

전자의 경우 사용할 수있는 셀이 있어야하며, 해당 셀이 아직 생성되지 않았거나 풀에서 재 할당되지 않은 경우 사용할 수있는 셀이 있어야합니다.

위의 NSLog 명령을 사용하여 테이블 뷰에서 실제로 셀이 돌아가고 nil이 아닌지 확인하십시오.

+0

그래, ApplicationDidFinishLaunching과 IBAction AddTask 둘 다에서 호출 해 보았습니다. 버튼을 클릭 할 때 발생하며 둘 다 셀 라인을 따라 반환됩니다. . 그래서, 거기에 인스턴스가 있다는 것을 압니다. 그러나 setState :를 호출해도 모양이 변경되지는 않습니다. 실제로, 어떤 것이 가장 유용 할지라도 plist에서 checkboxes 상태를로드하는 방법을 파악하려고 할 때 특정 상태로 초기화 할 수 있습니다. 처음에는 initWithState와 같은 메소드가 있어야한다고 생각했지만 그와 같은 메소드는 존재하지 않습니다 ... – PopKernel

+0

체크 박스가 테이블 뷰의 행에 있으므로 데이터 소스는 프로그래밍 방식이 아닌 체크 박스의 상태를 설정하는 방법입니다. 체크 상자의 상태를 변경하려면 데이터 소스를 업데이트해야하며 그러면 테이블 뷰의 확인란이 업데이트됩니다. 위에서 시도한 것처럼 수동으로 변경하면 데이터 소스에서 해당 행에 대해 반환하는 값으로 다시 변경됩니다. 데이터 소스를 사용하는 것은 초기에 모든 체크 박스의 상태를 설정하는 방법이기도합니다. –

+0

자세한 내용은 Apple 개발자 웹 사이트에서이 페이지를 확인하십시오. https://developer.apple.com/library/mac/documentation/cocoa/conceptual/TableView/PopulatingView-TablesProgrammatically/PopulatingView-TablesProgrammatically.html –