2009-10-27 2 views
1

NSArrayController를 사용하는 두 가지 방법이 있다는 것을 깨달았습니다.배열이없는 NSArrayController

컨트롤러를 및에 바인딩하고 배열에 개체를 추가하십시오. 또는 Array를 전혀 사용하지 않고 컨트롤러에 직접 객체를 추가하십시오.

[racesArray addObject: [[Race alloc] initWithName:@"Human"] ]; 

또는

[myRacesController addObject: [[Race alloc] initWithName:@"Human"] ]; 

이후 나는 그것을 사용하는 올바른 방법이 궁금하다 내 요구에 대한 두 버전 잘 작동. 배열을 사용하는 것이 좋을지 모르지만 NSArrayController가 데이터를 저장할 수 있기 때문에 왜이 기능을 사용하지 않아야합니까?

답변

2

첫 번째 예와 같이 배열에 직접 말하지 마십시오. 배열 컨트롤러는 명시 적으로 KVO 알림을 게시하지 않는 한 변경 사항을 알지 못합니다. 이러한 알림은 번거롭기 때문에 잊어 버리기 쉽습니다.

내가 추천하는 방법은 (클래스의 initdealloc 방법 제외) 한 후, 어레이 컨트롤러를 결합하여 속성 KVC-compliant array accessor methods을 구현하고 앱에서 모든 곳에서 사람들을 사용하는 것입니다.

그런 식으로 개체는 KVO 알림을 명시 적으로 게시하거나 배열 컨트롤러에 대해 알 필요없이 자체 배열을 변경할 수 있습니다.

1

두 가지 방법으로 문제가 없습니다. 배열을 지정하지 않으면 NSArrayController이 자체 배열을 유지합니다.

0

NSArrayController는 UI 요소와의 바인딩에 KVO를 준수합니다. selectedObject와 같은 객체 배열에 대한 추가 메타 데이터도 있습니다. NSArray에서는 이러한 편리한 객체를 사용할 수 없습니다. NSArray는 정의 된 일반 배열 연산자와 메서드가있는 배열입니다. UI 요소로 바인딩 할 필요가없는 경우에 사용하십시오.