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 아이콘에서 마우스 오른쪽 클릭해서 나타나는 팝업 메뉴에서 기능이 제대로 연결되어 있는지 확인.
여기까지 하고 나면 작업 완료. 컴파일 후 실행 해서 제대로 처리 되는지 확인한다.