2009-10-20 4 views
1

간단한 것을 놓치고 있어야하지만 NSDictionaryController에 tableView를 바인딩하는 데 문제가 있습니다. 다음은 현재 구성표의 모델입니다.NSDictionaryController가 내용 사전에 대한 변경 사항을 관찰하지 않는 것 같습니다

TableViewColumn --bindsTo -> DictionaryController.arrangedObjects (값 또는 키) --binds-> someClass.someClassMember.aDictionary.

올바르게 표시되는 init의 aDictionary에 항목을 추가하여 tableView를 테스트했습니다. 그러나 다른 메서드가 aDictionary에 추가 된 개체를 생성 할 때 TableView는 aDictionary에 두 개의 항목이 있다는 것을 업데이트하거나 알 수없는 것처럼 보입니다. 나는 내가 생각할 수있는 모든 것을 시도했다. 나는 이 아니며은 aDictionary에 직접 액세스하고 있습니다. (someClassMember에서) [self aDictionary setValue : forKey :], [self setValue : forKeyPath : @ "aDictionary"] 및 유사한 유사어를 시도했습니다. 키는 문자열이므로 KVC/KVO를 준수해야하며 someClassMember에 '@ synthesize'd aDictionary가 있습니다.

무엇이 누락 되었습니까? 사전에 새 항목이 tableView에 표시되지 않는 이유는 무엇입니까? 사전

+0

someClass 누군가는 공개한다는 점에서,이 도움을 준 첫 번째 대답 –

답변

1

에서

덕분에 새 항목을 추가하기 전에 [self willChangeValueForKey:@"aDictionary"];을 시도하고 내가 원하는 [self didChangeValueForKey:@"aDictionary"]; 이후

+1

에 대한 의견 묻는 질문에 대한 대답 aDictionary의 객체 중 하나가 'copyWithZone'을 제대로 구현하지 못하는 문제입니다. 하지만 그 문제를 해결 한 후에도 여전히 [self will/didChangeValueForKey]가 필요합니다. 나는 KVC를 충분히 이해하지 못한다고 생각합니다. 내 디자인에 대해 dictionaryController 또는 tableView 내용을 프로그래밍 방식으로 변경된 사전을 관찰에서 유지합니까? KVC 규격을 준수해야하며 수동으로 알려야하는 이유는 무엇입니까? –

+0

누군가 위의 질문에 대답 할 수 있습니까? –

+0

당신이 이해할 수 있듯이, 당신은 변경 가능한 사전 객체를 관찰하고 있습니다. 현재 구현되어 있으므로 키 값 관찰 통지가 변경 될 때 게시하지 않습니다. 당신은 아무 것도 잘못하지 않고 그냥 알림을 게시하지 않습니다. 따라서 사전에 돌연변이가 발생했을 때 모든 사람이 알기를 원할 경우 통지를 직접 게시해야합니다. 그것이 올바른 행동이라고 생각하지 않는다면 Apple에 버그 리포트를하십시오. –