2010-08-03 4 views
7

나는 이것을 2 일 동안 시도해 왔으며 끊임없이 막 다른 길을 달리고있다.가변 배열에서 NSTableview 채우기

저는 MAC OS X 용 Aaron Hillegass의 Cocoa Programming을 거쳤으며, NSTableview 및 가변 배열을 다루는 모든 관련 연습을 수행했으며, 필자의 요구에 맞게 수정하려고 시도해 왔습니다.

그러나 이들 중 아무 것도 데이터 소스로 개체가있는 배열을 사용하고있는 것처럼 보이지는 않습니다. 데이터 원본으로 tableview를 사용하는 것 같습니다.

결과를 표시하기 위해 Jonas Jongejan의 "재 작업"을 내 코드 here으로 구현하려고합니다.

모든 포인터 또는 제안 나는 이것이 간단해야한다는 것을 알고 있지만, 여기 광야에서 길을 잃는다.

나는 배열

답변

14

당신이 그것을 이해하기 위해 일단 그것은, 정말 아주 간단에 따라 배열에 액세스하는 데 그 위임 방법을 사용 (물론!). NSArray를 테이블 소스로 직접 사용할 수 없습니다. NSTableViewDataSource을 구현하는 사용자 지정 개체를 만들거나 기존의 일부 클래스 (일반적으로 컨트롤러)에서 해당 프로토콜을 구현해야합니다. Xcode를 사용하여 표준 문서 기반 응용 프로그램을 만드는 경우 문서 컨트롤러 클래스 (MyDocument라고 함)는 사용하기 좋은 클래스입니다.

당신은 적어도 다음 두 가지 방법을 구현해야합니다

– numberOfRowsInTableView: 
– tableView:objectValueForTableColumn:row: 

당신은 그 값을 하나 열, 같은있는 테이블보기에서 사용하고 싶습니다 변경 가능한 배열이있는 경우로해야 다음 시작 :

– numberOfRowsInTableView: (NSTableView*) aTableView 
{ 
    return [myMutableArray count]; 
} 

– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex 
{ 
    return [myMutableArray objectAtIndex: rowIndex]; 
} 

단지 당신이있는 NSArray는 selfmyMutableArray를 교체하는 카테고리로 위의 두 가지 방법을 추가 할 수 있습니다 다음 데이터 소스와 같은 배열을 사용할 수있는 나에게 발생했습니다.


어쨌든, 변경 가능한 배열, 당신이 테이블 뷰 -reloadData를 보낼 필요가 있도록 변경 언제든지, 당신은,이 변경되었습니다 알고있는 테이블보기를 할 필요가 있다는 것이 중요하다. 테이블 뷰는 하나 이상의 열이 있고 당신이 당신의 배열에있는 객체의 속성을 채우려면


, 당신은 자신을 위해 더 쉽게 할 수있는 트릭이있다.이제 배열의 개체 정의의 두 가지 방법으로 사람이라는 클래스의 인스턴스 인 가정 해 봅시다 :

-(NSString*) givenName; 
-(NSString*) familyName; 

은 당신이 당신의 테이블보기 그 각각에 대해 열을 갖고 싶어, 당신은 각 열의 identifier 속성을 설정할 수 있습니다 당신이 valueForKeyPath:valueForKey:을 대체하고 Person 클래스는 다음과 같은 방법이있는 경우

– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex 
{ 
    Person* item = [myMutableArray objectAtIndex: rowIndex]; 
    return [item valueForKey: [tableColumn identifier]]; 
} 

:

을 해당 열을 표시하고 다음과 같은 것을 사용하는 것이 사람의 속성의 이름
-(Person*) mother; 
-(Person*) father; 
-(NSString*) fullName; // concatenation of given name and family name 

과 같은 식별자를 가진 테이블 열을 추가 할 수 있습니다 : father.fullName 또는 mother.familyName 값이 자동으로 입력됩니다.

1

애플이 난 당신이 그 가이드의 Using a Table Data Source 섹션을 시작하는 것이 좋습니다 그래서 프로그래밍 테이블보기에 대한 전체 가이드가 있습니다를 설정하여 테이블을 채울 수 있습니다.

+1

이 링크가 작동하지 않습니다! 그것을 업데이트하십시오! – elin3t

1

iPhone에서 (저는 Mac에 대해 말하고 있지만, 아마도 도움이 될 수 있습니다) 위임을 사용하여 tableView를로드해야합니다. 그것은 셀을 요구하고 배열을 사용하여 필요한 곳에 데이터를 채 웁니다. Mac 용으로 작동하는지 잘 모르겠지만 조사할만한 가치가 있습니다.

은 어쩌면 자기에 데이터 소스를 설정하고 행과 열 #

+0

@ willcodejavaforfood의 대답은 아이폰에 대한 것이지만, 그 링크를 따라 가서 무슨 뜻인지 알 수 있습니다. – RSully

+0

죄송합니다. 내 머리에 iPhones가 있습니다. :) – willcodejavaforfood

3

당신은 데이터 소스 경로를 가서 자신을 무겁게 할 수 있습니다. 그렇지 않으면 바인딩이 모든 힘든 일을 할 수 있습니다. 테이블보기가있는 nib 파일에 NSArrayController을 추가하십시오. 펜의 파일 소유자가 변경 가능한 배열이있는 동일한 클래스로 설정되어 있는지 확인하십시오. 어레이 컨트롤러의 contentArrayFile's Owner.myMutableArray에 바인드하십시오. 각 열의 경우 Value을 어레이 컨트롤러 arrangedObjects에 바인드하고 적절한 키 경로를 추가하십시오. 이렇게하면 필요할 때 무료로 사용자 정렬과 같은 작업을 수행 할 수 있습니다.