2012-11-27 2 views
0

나는 위대한 작품 NSOutlineView 있습니다. 모델을 변경하면 [self.myOutlineView reloadData]으로 전화하면 개요보기가 업데이트됩니다. 그러나 내 프로그램의 프로파일을 작성하면 10 %의 시간이 내 outlineview를 업데이트하는 데 사용됩니다. 따라서 [self.myOutlineview reloadItem:myIndexPath]을 호출하여 전체 outlineview가 아닌 ​​변경된 모델 객체 만 업데이트하려고했습니다. 여기서 myIndexPath은 업데이트 할 outlineview의 노드에 대한 NSIndexPath입니다. 그러나 reloadItem으로 전화를 걸면 아무 일도 일어나지 않지만 reloadData으로 전화하면 모든 것이 완벽하게 작동합니다. 누구든지 내가 뭘 잘못하고 있거나이 문제를 해결할 방법에 대한 제안이 있습니까?reloadData가 작동하지만 reloadItem이 작동하지 않는 이유는 무엇입니까?

감사합니다. 건배, 트론

답변

2

개요보기의 reloadItem:에는 인덱스 경로가 아닌 항목 매개 변수가 필요합니다. 따라서 실제 아이템을 전달하십시오. NSIndexPathNSOutlineView 클래스에서 전혀 사용되지 않습니다.

+0

고마워요! 그러면 reloadItem을 예를 들어 '- (void) outlineView : (NSOutlineView *) outlineView willDisplayCell : (id) cell forTableColumn : (NSTableColumn *) tableColumn item : (id) item'은 [self reloadItem : item]'과 비슷한가요? 또는 outlineview 대리자 외부에서 항목 개체를 가져올 수 있습니까? –

+0

Item은 '- (id) outlineView : (NSOutlineView *) outlineView 하위 : (NSInteger) 인덱스 ofItem : (id) item' 데이터 소스 메소드에 제공 한 객체입니다. 귀하의 기본 데이터입니다. 아웃 라인 뷰는 그것을 만들지 않으며, 데이터 소스로부터옵니다. – Davyd

+0

완벽한 @Davyd! 내 reloadItem에 잘못된 유형의 객체를 보냈습니다. 그것이 작동하지 않는 이유입니다. 객체를 NStreeNode 객체로 변경하면 다음과 같이 동작합니다. NSTreeNode * mytreenode = [self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath : myIndexPath];'[self.myOutlineViewController performSelectorOnMainThread : @selector (reloadItem :) withObject : mytreenode waitUntilDone : NO];'. 'reloadData' 대신'reloadItem'을 사용하면 사용 시간이 10 %에서 0.3 %로 줄어들었고 22 초 전과 비교하여 프로그램을 마치는 데 12 초가 걸렸습니다. 감사합니다! –

관련 문제