gpt4 book ai didi

objective-c - NSArrayController 上的 SelectionIndexes 只返回一个值

转载 作者:太空狗 更新时间:2023-10-30 03:41:45 26 4
gpt4 key购买 nike

我有一个 NSCollectionView,其内容由 NSArrayController 处理。NSCollectionView 是可选的,我需要检索所选元素的列表。我正在尝试观察 NSArrayController“selectionIndexes”的关键属性,但它总是返回 CollectionView 中第一个元素的值,而不是所选项目的值。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualTo:@"selectionIndexes"])
{
//True if in the array controller of the collection view really exists at least a selected object
if([[arrayController selectedObjects] count] > 0)
{
NSLog(@"Selected objects: %@", [arrayController selectedObjects]);
}
else
{
NSLog(@"Observer called but no objects where selected.");
}
}
}

更新

我从来没有调用过这个方法,如果我手动调用 NSLog(@"Selected objects: %@", [arrayController selectedObjects]) 我会得到这个

结果总是这样

结束更新

2011-07-05 20:44:45.711 collectionView2[2153:903] Selected objects 1: (
"<Hormiga: 0x10013e330>"
)

我想我在将 NSArrayController 与 NSCollectionView 绑定(bind)时做错了。我的错是什么?如果您需要更多信息,请告诉我,如果您需要,我什至可以将整个程序以 zip 格式发布。

更新 2

这是我在 Controller 中用来观察 arrayController“selectionIndexes”键的代码。

[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];

更新 3

其中一个问题已解决,我忘记设置 NSArrayController 和 NSCollectionView 之间相对于键“selectionIndexes”的绑定(bind)。现在我可以手动检索 selectedObject 的列表及其正确的!

我的最后一个问题是当 selectionIndexes 发生变化时我没有收到通知。所以 observeValueForKeyPath:ofObject:change:context: 永远不会被调用!

更新 4

我试图在我的 Controller 的 init 方法中设置观察者,但这样 arrayController 仍然为 null。在 awakeForNib 中移动 addObserver 解决了我所有的问题!

最佳答案

如果你想保持数组 Controller 的选择索引与 Collection View 的同步,你也需要绑定(bind)它们。总结:

  • 绑定(bind) Collection View Content到数组 Controller ,key arrangedObjects
  • 将 Collection View Selection Indexes 绑定(bind)到数组 Controller ,key selectionIndexes

此外,请确保在添加观察者之前已设置 arrayController。保证在 -awakeFromNib 和之后调用的其他方法中设置导出:如果您使用的是窗口 Controller ,则可以使用 -windowDidLoad;如果您使用的是 View Controller ,则可以使用 -loadView;否则,-applicationDidFinishLaunching: 在您的应用程序委托(delegate)中。

关于objective-c - NSArrayController 上的 SelectionIndexes 只返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com