2009-10-03 1 views
4

(요약 : 바인딩은 코드에서 작동하지만 IB에서는 작동하지 않음)NSViewController의 representObject에 바인딩

NSWindowController에서 관리하는 창이 있습니다. 창의 왼쪽에는 소스 뷰가 있습니다. 오른쪽에는 현재 선택된 소스의 요소를 보여주는 테이블보기가 있습니다.

내 창 XIB 안에 NSTreeController를 설정했습니다. 그 내용을 소스보기에 사용하고 싶습니다. 테이블 뷰가 선택됩니다.

NSViewControllers를 사용하여 이것을 분리하려고합니다. 한 뷰 컨트롤러는 소스 뷰를 포함하는 NIB를로드합니다. 다른보기 컨트롤러가 테이블보기를로드합니다.

원본보기 컨트롤러 내에서 NSTreeController에 대한 액세스가 필요하다는 것을 알기 때문에보기 컨트롤러의 representObject로 설정했습니다. (사실 awakeFromNib가 뷰 컨트롤러에서 호출 될 때까지이 설정을 수행하려면 representObject를 IBOutlet으로 바꿨습니다.)

[outlineView bind:@"content" 
     toObject:sources 
     withKeyPath:@"arrangedObjects" 
      options:nil]; 
[outlineView bind:@"selectionIndexPaths" 
     toObject:sources 
     withKeyPath:@"selectionIndexPaths" 
      options:nil]; 
[[outlineView tableColumnWithIdentifier:@"Title"] bind:@"value" 
               toObject:sources 
              withKeyPath:@"arrangedObjects.title" 
               options:nil]; 

나는이 사용하는 인터페이스 빌더를 재현 그러나 드릴 수 없습니다 : 내 소스 코드에서 볼 연결할 때

모든 잘 작동합니다. 여기서 "컨트롤러 키"텍스트 필드가 회색으로 표시됩니다. 따라서 나는 "representObject.arrangedObjects.title"이라는 모델 keyPath를 사용하여 열의 "value"를 파일 소유자에 바인딩합니다. 원하는 동작이 표시되지 않습니다. 실제로 예외가 throw됩니다. -[NSProxy doesNotRecognizeSelector:_mutatingNodes] called!

IB에서 representObject를 어떻게 사용합니까? IB에서 representObject의 프록시 역할을하는 컨트롤러를 만들 수 있습니까? NIB 로딩 중에 representObject에 대해 스왑 아웃되는 원본 뷰 XIB에서 트리 컨트롤러를 설정할 수 있습니까?

답변

2

나는 대신 representObject 사용을 떠났다. 이것은 모델 객체에만 의미가있는 것으로 나타납니다.

이제 사용자 지정 콘센트를 사용하여 트리 컨트롤러를 전달합니다. 나는 코드에서 바인딩을 설정하고 해체했습니다.