2012-01-31 3 views
1

그래서 NSWindowController를 인스턴스화하고 차례로 .xib를 인스턴스화합니다. xib에는 배열을 NSManagedObjects로 채우는 NSArrayControllers가 있습니다. 윈도우 컨트롤러에는 .xib의 NSTableView에 대한 데이터 소스로 사용되는 (변경 가능) 배열 속성이 있습니다. NSTableViewDataSource (및 대리자) 메서드가 구현되어 있습니다. 지금까지 그렇게 좋았습니다.NSArrayController가 NSTableView 데이터 소스에 너무 늦었습니까?

창 컨트롤러에는 xib의 어레이 컨트롤러에 대한 콘센트가 있습니다. 배열을 채울 때 (사전을 사용하여 개체의 키가 테이블의 열 식별자와 아무런 문제가 없음) 배열 컨트롤러의 내용을 가져 오는 데 어려움을 겪고 있습니다.

어쨌든 배열 컨트롤러가 관리 대상을 시간 내에 가져 오지 못하고 있습니다. 내가 테이블을 채우는 배열 속성에 대해 사전을 만들기 위해 배열 컨트롤러의 배열 (arrangedObjects :)을 얻었을 때 나는 아무것도 얻지 못합니다.

올바른 순서로 작업하지 않습니까? 누군가가 (예 : 어레이 컨트롤러와 같은) IB 개체가 언제 어떻게 데이터를 가져 오는 지에 대한 좋은 설명을 가르쳐 줄 수 있습니까? 인터페이스 빌더의 테이블 (서브 클래 싱 된) 오브젝트로 코드를 채우는 테이블을 이동해야합니까? 나는 창 컨트롤러의 init, awakeFromNib 및 windowDidLoad 메서드에서 테이블 배열을 조작하려고 시도했다. 이 작동하는 것 같지만, 나는 테이블의 배열 개체를 창의 makeKeyAndOrderFront 메서드에 추가해야 할 것 같은데.

답변

1

오른쪽.

windowController의 init 및 windowDidLoad 메서드가 테이블의 배열을 채울 잘못된 위치 인 것으로 보입니다. 나는 왜 그런지 잘 모르겠다.

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    [self populateTable]; 
} 

populateTable는 다음 .xib에 연결되어 함께 IBOutlet 인스턴스 변수를 사용하는 방법 : 내가 마무리과 같이 할 수 windowController의로 awakeFromNib를 기다릴 때

는 괜찮은 작동하는 것 같다 파일의 소유자 (내 윈도우 컨트롤러)에서 NSManagedObjects를 보유하고있는 NSArrayControllers로 전달합니다.

awakeFromNib 메소드가 xib에서 계층 적으로 더 깊게 배열 된 요소보다 awakeFromNib가 xib의 구조에서 상위에있는 요소에서 더 빨리 발사 될 수 있습니까?


내가 대신 실제 선택한 관리 객체의 배열 컨트롤러의 선택은 NSObjectControllerProxy을 반환 발견 약간의 문제를 했어. 코드 위

MyManagedObject *object = [myArrayController selection]; 

이 작동하지 않습니다. 코드의 다음 줄이 나에게 정교하게 보이지만, 트릭을 수행합니다 ..

MyManagedObject *object = [[myArrayController arrangedObjects] objectAtIndex:[myArrayController selectionIndex]]; 
관련 문제