ArrayController를 사용해서 NSTableView 에 추가 삭제를 자동 코코아 프로그래밍 책에서 본건데, 책에서는 NSDocument를 사용한 예제를 보여줬지만, 꼭 이걸 써야하나 싶어서 잠깐 해봤는데 잘 처리 됐음 > 이게 정상 처리된 것인지는 잘 모름 , 2009/3/3 ===== 해본 방법 ===== ==== 구성사항 ==== Array Controller를 닙뷰에 추가 Library > Cocoa > Objects & Controllers >> Array Controller AppController 클래스에 배열을 저장할 변수가 선언되어 있음 // header @interface AppController : NSObject { NSMutableArray *webImageList; } @end // code - implementation // 별거 없음, 배열을 생성하고 삭제하는 기능 @implementation AppController - (id)init { [super init]; webImageList = [[NSMutableArray alloc] init]; return self; } - (void) dealloc { //[self webImageList:nil]; // 이 코드의 방식에 주목 [super dealloc]; } @end 배열 내부에 들어갈 아이템 클래스 // header - 스트링 몇개를 가지고 있는 클래스. 키밸류 기능을 활성하기 위해 프로퍼티를 사용했다. @class NSMutableString; @interface ImageItem : NSObject { NSMutableString *postTitle; NSMutableString *imageTitle; NSMutableString *imageUrl; } @property(copy, readwrite) NSMutableString *postTitle; @property(copy, readwrite) NSMutableString *imageTitle; @property(copy, readwrite) NSMutableString *imageUrl; @end // 프로퍼티 덕분에 코드가 줄었다. 스트링에 초기값을 넣은 것은, 디버그용으로 사용한 것임 @implementation ImageItem @synthesize postTitle; @synthesize imageTitle; @synthesize imageUrl; - (id)init { [super init]; postTitle = @"a"; imageTitle = @"b"; imageUrl = @"c"; return self; } - (void)dealloc { [postTitle release]; [imageTitle release]; [imageUrl release]; [super dealloc]; } @end 윈도우 리소스 * NSTableView를 화면에 가져다 놓는다. * 버튼을 두개 추가한다 : 추가,삭제 라고 레이블을 단다. ==== 배열을 구성할 아이템 추가 ==== Array Controller Attributes 선택하고 Inspector 화면에서 Object Controller 섹션에 * Mode : class * Class Name : __배열을구성할클래스이름__ 추가, 나중에 이 클래스를 생성해서 추가하기 때문에, 진짜 클래스여야 함 ==== 실제배열클래스와 연결 ==== 여기서는 NSMutableArray와 연결하려고함. * Array Controller Bindings 에서 Controller Contents > Content Array 섹션 선택 * "Bind To" 에서, NSMutableArray 가 선언된 클래스를 선택 * 여기서는 AppController를 선택 * Model Key Path 에서 NSMutableArray 변수의 이름을 추가 ==== NSTableView의 컬럼과 연결 ==== NSTableView에서 한컬럼을 선택 : **테이블뷰를 모두 선택하는게 아니라** 테이블 뷰의 특정 컬럼을 선택하는 것을 주의. NSTableView는 여러 레이어로 구성되어 있어서, 선택시 햇갈리지 않도록 주의가 필요함. * 컬럼 선택후, **Table Column Bindings**을 선택 * Value 섹션에서 다시 Value 서브 섹션 선택 * **Bind to**에서 Array Controller 선택 * Model Key Path 에서 **ImageItem** 클래스에서 테이블 뷰에 추가하고 싶은 변수 이름을 작성 * 자동선택되도록 콤보박스에 추가되지는 않음. * 나머지도 같은 과정으로 컬럼에 출력할 값을 추가함. ==== 버튼에 기능을 부여 ==== * "추가" 버튼에서 마우스 오른쪽 클릭 후 Array Controller을 선을 가져간다. * 나타나는 메뉴 중에서 **add:**를 선택 * "삭제" 버튼에서 마우스 오른쪽 클릭 후 Array Controller을 선을 가져간다. * 나타나는 메뉴 중에서 **remove:** 를 선택 Array Contrller 아이콘에서 마우스 오른쪽 클릭해서 나타나는 팝업 메뉴에서 기능이 제대로 연결되어 있는지 확인. 여기까지 하고 나면 작업 완료. 컴파일 후 실행 해서 제대로 처리 되는지 확인한다.