2012-11-08 2 views
1

NSMutableArray (arrayOfFiles)에 바인딩하는 NSTreeController에 의해 제어되는 내용을 보여주는 NSOutlineView가 있습니다. 이 배열은 NSTreeNode 객체를 포함하는데, 여기서 representObject (File 객체 클래스)는 많은 ivars를 가지고있다. 특정 개체에 대해 "방향"이라는 ivar을 편집하고 업데이트하고 싶습니다. 각 객체에 대해 저장 한 NSIndexPath를 사용하여 관심 객체를 가져올 수 있습니다.NSOutlineView의 내용 업데이트

[self.myOutlineViewController.myTreeController setSelectionIndexPath:myIndexPath]; 

Fileobject *myObject =[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject]; 

[myObject setDirection:0]; 

잘 작동하지만 NSIndexPath에서 방금 추출한 개체를 업데이트하려고 할 때 문제가 발생합니다. 다음 충돌 : 오류 메시지

An uncaught exception was raised 
2012-11-08 17:23:25.557 S3access[20379:12b03] *** -[NSKeyValueSlowMutableArray  removeObjectsAtIndexes:]: value for key myArrayOfFiles of object 0x40012e460 is nil 

내가 여기 Key-Value coding 뭔가 잘못을하고있는 중이 야하지만 난 그것이 무엇인지 볼 수 없습니까 이해와 [self.myOutlineViewController.myTreeController removeObjectAtArrangedObjectIndexPath:myIndexPath];. 애플의 모든 예제에서 솔루션을 찾으려고 노력했지만 NSTreeController와 NSTreeNode를 사용하지 않는 예제 만 찾을 수 있습니다. 내 생각은 1) indexpath에서 객체 추출 2) 추출 된 객체 편집 3) indexpath에서 현재 객체 제거 4) 명령 [self.myOutlineViewController.myTreeController insertObject:myNode atArrangedObjectIndexPath:myIndexPath];을 사용하여 indexpath에 새 편집 객체 삽입 나는 ivar 만 대체하지 않고 Key-Value 코딩을 사용하여 객체를 대체 할 수있는 방법을 보았습니다.

내가 뭘 잘못하고 어떻게 해결할 수 있습니다 제안에 대한 제안은 매우 감사하겠습니다.

환호와 감사합니다! Trond

답변

1

나는 결국 NSOutlineView에 대한 나의 업데이트를 올바르게 관리 할 수 ​​있었고, 나의 질문은 극단적 인 tumbleweed 였기 때문에 나는 적어도 대답으로 업데이트 할 것이라고 생각했다. 내 문제는 프로그래밍 문제가 아니라 KVC에 대한 올바른 이해가 부족한 것으로 나타났습니다. Stackoverflow 및 Apple documentation에 대한 질문에 대한 답변을 읽은 후 NSTreeNode를 사용하여 표현되는 NSOutlineView 및 해당 NSTreeController 내용 (arrangedObjects)의 동적 업데이트를 사용하는 방법을 알게되었습니다.

[self.myOutlineViewController.myOutlineView willChangeValueForKey:@"direction"]; 
[[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject] setDirection:0]; 
[self.myOutlineViewController.myOutlineView didChangeValueForKey:@"direction"]; 

는 희망이 어떤 다른 사람을 도울 수 있습니다 : 다음 코드는 개체의 NSIndexPath (myIndexPath을) 알고 가정 날 위해 일했습니다. 환호, 트론