2014-02-07 7 views
1

CoreData/Document 기반 앱에서 작업하고 있습니다. UI의 한 영역에서 다양한 열이있는 뷰 모드 테이블을 설정했습니다. 하나의 열에 NSPopupButton이 있고 그 중 선택된 인덱스 바인딩 설정이 Table Cell View.objectValue.startupState로 설정되어 있습니다.setValue를 사용할 때 NSPopupButton이 업데이트되지 않습니다. forKey : 해당 CoreData 바운드 필드에 대해

팝업에서 메뉴 항목을 선택하면 엔티티의 startupState 속성이 클릭 한 메뉴 항목의 색인과 NSPopupButton 텍스트 업데이트로 올바르게 업데이트됩니다. 사실 속성 값이 문서를 저장하고 닫은 다음 다시 열어서 업데이트되었는지 확인했습니다.

또 다른 열에서 동일한 엔티티 (표 셀 View.objectValue.mode)의 다른 속성과 비슷하게 바인딩 된 NSPopupButton이 있습니다. 모드 선택에 따라 그것은 어떤 경우에는이 문을 수행 setMode의 수동 구현을 통해 startupState 값을 수정합니다 :

[self setValue:[[NSNumber alloc] initWithInt:1] forKey:@"startupState"]; 

난 데 문제는 NSPopupButton 메뉴를 보여주기 위해 업데이트되지 않는 것입니다 선택한 색인의 항목 텍스트 앞에서와 마찬가지로 위 코드가 실행 된 후 문서를 저장하고 닫은 다음 다시 열었고 올바른 항목이 선택되었거나 텍스트가 표시되어 setValue 호출이 특성을 업데이트했다는 것을 알았습니다.

아이디어가 있으십니까?

+0

더 많은 사용자 정의 설정기를 게시 할 수 있습니까? 어쩌면 will/didChangeValue 메시지가 누락 되었습니까? 또한 bool 인 경우에는 [[NSNumber numberWithBool : YES]'를 사용하지 않으시겠습니까? – Volker

+1

CoreData에'startupState'가 있습니까? 아니면 파생됩니까? @dynamic이라고 선언 되었습니까? 또한 언제이 상태를 설정합니까? 팝업이 실제로 팝업되는 동안 설정되어 있습니까? –

+0

감사합니다 Volker! - 그게 문제 였어. – jason

답변

0

의견에서 언급했듯이 Volker의 제안은이 문제를 해결합니다. willChangeValueForKey 및 didChangeValueForKey 메시지는 다음과 같이 setValue : forKey 호출에서 필요합니다.

[self willChangeValueForKey:@"startupState"]; 
    [self setValue:[[NSNumber alloc] initWithInt:1] forKey:@"startupState"]; 
    [self didChangeValueForKey:@"startupState"];