我有一個NSTreeController綁定到NSOutlineView(沒有核心數據)。可可的參考:NSTreeController添加:方法不添加「當前選擇後」
地址:
當前選擇後添加一個對象接收。
- (void)add:(id)sender
什麼絆倒我出去的是,當添加方法被調用它把新的項目在列表的末尾,選定項目後不。插入方法似乎按預期工作(在選擇之前添加的項目)。難道我做錯了什麼?如何在選定的項目之後插入新節點,而不是在列表的末尾?
我有一個NSTreeController綁定到NSOutlineView(沒有核心數據)。可可的參考:NSTreeController添加:方法不添加「當前選擇後」
地址:
當前選擇後添加一個對象接收。
- (void)add:(id)sender
什麼絆倒我出去的是,當添加方法被調用它把新的項目在列表的末尾,選定項目後不。插入方法似乎按預期工作(在選擇之前添加的項目)。難道我做錯了什麼?如何在選定的項目之後插入新節點,而不是在列表的末尾?
這是我最終做的,我實現了一個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
你可能想要做的是致電insertObject:atArrangedObjectIndexPath:
。
創建一個IBAction(即:(IBAction)addAfterSelection:(id)sender
)並讓它實例化您的對象,將所選的indexPath指定爲insertObject:atArrangedObjectIndexPath:
。
如果不是這樣,或許驗證確保排序發生在NSOutlineView
上。
將最後一個選定節點的NSIndexPath與insertObject一起使用:atArrangedObjectIndexPath:適用於插入,但仍不會在最後一個選定項之後添加新節點_after_。我可以以某種方式計算最後一個選定節點之後的下一個索引路徑,但NSIndexPath似乎沒有用於下一個位置的方法(它的下一個_index_)。看來,我希望,他們是一些內置的方法,根據文檔**補充:**應該做的。 – Gobot
也許這是我做錯了,但似乎NSTreeController和NSTreeNodes似乎是非常適合的點的錯誤。我嘗試過獲取父節點(這是本例中的根節點)並通過** mutableChildNodes:**創建一個NSMutableArray,然後向該數組添加一個節點。當我這樣做時,我得到一個異常**「 - [NSTreeNode _setupObserving]:無法識別的選擇器發送到實例0x20004f640 」**,這對我來說意味着NSTreeNode不符合KVO,即使文檔聲明它們是。 – Gobot
您在Interface Builder中爲NSTreeController的KVO設置了哪些鍵,這聽起來更像是綁定問題,而不是bug。 – LearnCocos2D