2010-03-07 2 views
9

NSTableColumn 내용을 정렬하는 데 문제가 있습니다. 내 NSTableView에는 파일, 크기, 경로라는 세 개의 열이 있습니다. 내용은 NSMutableArray에 저장됩니다. 이 배열의 각 객체는 파일, 크기 및 경로의 세 가지 키를 포함하는 NSDictionary입니다. 각 NSString은 NSString입니다.NSTableColumn 내용 정렬

Interface Builder에서 각 테이블 열의 속성에서 정렬 옵션을 선택할 수 있습니다. 선택자 : IB가 "compare :"를 입력했는데 NSString을 비교하기 때문에 "OK : OK"라고 입력했습니다. 정렬 키 - 이것이 내가 생각하는 문제입니다 - 여기에 무엇을 입력해야할지 모르겠습니다.

실마리가 있습니까? 내 코드에 대해 궁금한 점이 있으면 질문하십시오.

답변

11

그래서 완벽한 해결책을 찾았습니다.

먼저 인터페이스 빌더로 이동하십시오. 정렬 할 열을 선택하십시오. 열의 속성으로 이동하여 첫 번째 버튼을 선택하여 '표의 열 속성'을 확인하십시오. 설정 적절한 값 (문자 그대로, 아니 '또는'나 @가 필요하다) :

Sort key: file 

'. 파일'내용이 열에 표시됩니다 사전의 키는

Selector: compare: 

표준 분류 기능을 . 이제

, 여기에 모든 변경 사항을 저장하고, NSTableView는에 표시된 데이터의 소스는 이미 당신이 두 가지 방법을 필요로하는 모델을 알아야되는 클래스, 엑스 코드로 이동 :.

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView 
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn 
*)tableColumn row:(NSInteger)row 

이 두 가지는 NSTableDataSource 비공식 프로토콜을 준수하는 데 필요합니다. 당신은 MacDev 센터에서 그것에 대해 읽을 수 있습니다.

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 

는 일을 할 것입니다 매우 간단한 코드를 포함 할 수 있습니다 :

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 
{  
    NSArray *newDescriptors = [tableView sortDescriptors]; 
    [results sortUsingDescriptors:newDescriptors]; 
    //"results" is my NSMutableArray which is set to be the data source for the NSTableView object. 
    [tableView reloadData]; 
} 

을 그리고 그게 다야

지금 당신이해야 할 새로운 방법을 추가하는 것입니다. 그것은 내 애플 리케이션에서 일하고있어, 그것이 당신의 경우에 효과가 있기를 바랍니다 : 모든 것이 자동으로 작동해야합니다. 방금 모든 파일을 저장하고 응용 프로그램을 작성했습니다. 그리고 효과가있었습니다.:) 나에게 도움이

사이트 : 답장을 이 CocoaDev: SortingNSTableView

+0

당신은 나의 하루를 구했습니다! – 11684

+0

당신을 진심으로 환영합니다! –

+0

Awsumly 나를 화나게하는 것에서 구해 줬다. .. :) –

2

키는 사전에서 값을 검색하는 데 사용하는 key입니다.

귀하의 경우에는 파일, 크기 및 경로의 세 가지 키가 있습니다. 정렬 할 항목을 선택하십시오. 키는 정렬에 사용할 각 레코드에서 값을 검색하는 데 사용됩니다.

키가 @ "file", @ "size", @ "path"이고 file을 정렬하려는 경우 012의 해당 입력란에 Sort Key을 넣으십시오.

NSDictionaryvalues을 삽입 할 때 사용하는 키를 사용하십시오.

+0

감사하지만 내가하지 대답을 SE는. 이 창을 봅니다 : http://homepage.mac.com/simx/.Pictures/column_attributes.png 내 응용 프로그램에 코드 조각을 추가하는 것보다 쉽다는 느낌이 들었습니다. '정렬 키'입력란에 무엇을 입력해야합니까? –

+0

** 편집 ** : '혼란스러운'코드 예제를 제거했습니다. IB 값과 코드 간의 연결을 볼 수 있도록 코드에서 수행되는 방법을 보여주었습니다. 그러나 그것을 제거한 것들이 복잡하다는 것을 알았습니다. 이제 IB에 무엇을 삽입해야하는지 명확해야합니다. – stefanB

+0

작동하지 않습니다. 나는 또한 이것을 시도 : - valueForKey : @ "경로" - objectForKey : @ "파일" - value.objectForKey : @ "파일" 아무도 작동하지 않습니다. 무엇을 해야할지 모르겠다. 아마도 바인딩이나 뭔가를 만들어야할까요? 누가이 열쇠를 써야할까요? –