2012-11-08 78 views
1

我有一個NSOutlineView,它顯示了我綁定到NSMutableArray(arrayOfFiles)的NSTreeController所控制的內容。該數組包含NSTreeNode對象,其中mappedObject(Fileobject類)包含多個ivars。我想編輯和更新特定對象的名爲「方向」的伊娃。我設法使用我爲每個對象存儲的NSIndexPath來獲取感興趣的對象。NSOutlineView的更新內容

[self.myOutlineViewController.myTreeController setSelectionIndexPath:myIndexPath]; 

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

[myObject setDirection:0]; 

這工作正常,但我遇到了問題,當我想更新剛纔在NSIndexPath提取的對象。下面的崩潰:[self.myOutlineViewController.myTreeController removeObjectAtArrangedObjectIndexPath:myIndexPath];與錯誤信息

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在這裏,但我無法看到它是什麼。我試圖從蘋果的所有例子中尋求解決方案,但我只能找到不使用NSTreeController和NSTreeNode的例子。我的想法是1)在indexpath中提取對象2)編輯提取的對象3)在indexpath中刪除當前對象4)使用命令[self.myOutlineViewController.myTreeController insertObject:myNode atArrangedObjectIndexPath:myIndexPath];將我的新編輯對象插入到indexpath中。我沒有看到我怎麼可以替換我的對象使用鍵值編碼時,我不只替換一個伊娃,但整個對象?

對於我所做錯的任何建議以及我如何解決此問題的建議都非常感謝。

乾杯,謝謝! Trond

回答

1

我終於設法讓我的NSOutlineView的更新正常工作,因爲我的問題是一個極端風暴,我認爲我至少會更新一個答案。事實證明,我的問題更多的是缺乏對KVC的正確理解,而不是編程問題。在閱讀了關於Stackoverflow和Apple documentation問題的答案之後,我終於想出瞭如何啓用我的NSOutlineView及其使用NSTreeNode表示的NSTreeController內容(arrangeObjects)的動態更新。下面的代碼爲我工作假設你知道你的對象的NSIndexPath(myIndexPath):

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

希望這可以幫助一些人。歡呼聲,Trond