사용자 도구

사이트 도구


사이드바

language:cocoa:arraycontroller

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 아이콘에서 마우스 오른쪽 클릭해서 나타나는 팝업 메뉴에서 기능이 제대로 연결되어 있는지 확인.

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

language/cocoa/arraycontroller.txt · 마지막으로 수정됨: 2012/10/26 14:37 (바깥 편집)