2011-11-18 51 views
3

我有一個NSTreeController綁定到NSOutlineView(沒有核心數據)。可可的參考:NSTreeController添加:方法不添加「當前選擇後」

地址:
當前選擇後添加一個對象接收
- (void)add:(id)sender

什麼絆倒我出去的是,當添加方法被調用它把新的項目在列表的末尾,選定項目後不。插入方法似乎按預期工作(在選擇之前添加的項目)。難道我做錯了什麼?如何在選定的項目之後插入新節點,而不是在列表的末尾?

+0

也許這是我做錯了,但似乎NSTreeController和NSTreeNodes似乎是非常適合的點的錯誤。我嘗試過獲取父節點(這是本例中的根節點)並通過** mutableChildNodes:**創建一個NSMutableArray,然後向該數組添加一個節點。當我這樣做時,我得到一個異常**「 - [NSTreeNode _setupObserving]:無法識別的選擇器發送到實例0x20004f640 」**,這對我來說意味着NSTreeNode不符合KVO,即使文檔聲明它們是。 – Gobot

+0

您在Interface Builder中爲NSTreeController的KVO設置了哪些鍵,這聽起來更像是綁定問題,而不是bug。 – LearnCocos2D

回答

1

這是我最終做的,我實現了一個NSIndexPath類別,它計算下一個索引路徑,並用它來插入一個節點。這裏是類別:

@implementation NSIndexPath (additions) 
(NSIndexPath *)nextIndexPath:(NSIndexPath *)startingIndexPath 
{ 
    NSUInteger pathIndexesArray[[startingIndexPath length]]; 
    [startingIndexPath getIndexes:pathIndexesArray]; 
    pathIndexesArray[[startingIndexPath length] - 1]++; 
    return [NSIndexPath indexPathWithIndexes:pathIndexesArray length:[startingIndexPath length]]; 
} 
@end 
1

你可能想要做的是致電insertObject:atArrangedObjectIndexPath:

創建一個IBAction(即:(IBAction)addAfterSelection:(id)sender)並讓它實例化您的對象,將所選的indexPath指定爲insertObject:atArrangedObjectIndexPath:

如果不是這樣,或許驗證確保排序發生在NSOutlineView上。

+1

將最後一個選定節點的NSIndexPath與insertObject一起使用:atArrangedObjectIndexPath:適用於插入,但仍不會在最後一個選定項之後添加新節點_after_。我可以以某種方式計算最後一個選定節點之後的下一個索引路徑,但NSIndexPath似乎沒有用於下一個位置的方法(它的下一個_index_)。看來,我希望,他們是一些內置的方法,根據文檔**補充:**應該做的。 – Gobot