목차

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

윈도우 리소스

배열을 구성할 아이템 추가

Array Controller Attributes 선택하고 Inspector 화면에서 Object Controller 섹션에

실제배열클래스와 연결

여기서는 NSMutableArray와 연결하려고함.

NSTableView의 컬럼과 연결

NSTableView에서 한컬럼을 선택 : 테이블뷰를 모두 선택하는게 아니라 테이블 뷰의 특정 컬럼을 선택하는 것을 주의.

NSTableView는 여러 레이어로 구성되어 있어서, 선택시 햇갈리지 않도록 주의가 필요함.

버튼에 기능을 부여

Array Contrller 아이콘에서 마우스 오른쪽 클릭해서 나타나는 팝업 메뉴에서 기능이 제대로 연결되어 있는지 확인.

여기까지 하고 나면 작업 완료. 컴파일 후 실행 해서 제대로 처리 되는지 확인한다.