Giu*_*ppe 6 macos cocoa objective-c key-value-observing cocoa-bindings
我有一个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.");
        }
    }
}
UPDATE
我永远不会调用这个方法,如果我手动调用NSLog(@"Selected objects:%@",[arrayController selectedObjects])我得到这个
结果总是这样的
结束更新
2011-07-05 20:44:45.711 collectionView2[2153:903] Selected objects 1: (
    "<Hormiga: 0x10013e330>"
)
我想我已经做了一些错误的NSArrayController与NSCollectionView绑定.可能是我的错?告诉我如果你想要更多信息,我甚至可以在你需要的时候以邮政编码发布整个程序.
这是我在我的控制器中用来观察arrayController"selectionIndexes"键的代码.
[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];
其中一个问题是修复的,我忘了在NSArrayController和NSCollectionView之间设置相对于键"selectionIndexes"的绑定.现在我可以手动检索selectedObject列表及其正确!
我的最后一个问题是,当selectionIndexes发生变化时,我没有收到通知.所以observeValueForKeyPath:ofObject:change:context:永远不会被调用!
我试图在我的控制器的init方法中设置观察者,但是这样arrayController仍然是null.在awakeForNib中移动addObserver解决了我所有的问题!
小智 10
如果要使阵列控制器的选择索引与集合视图保持同步,则还需要绑定它们.综上所述:
Content到数组控制器keyarrangedObjectsSelection Indexes到数组控制器key selectionIndexes.此外,确保arrayController在添加观察者之前已设置.保证设置出口-awakeFromNib和其后调用的其他方法:如果你使用的是窗口控制器,你可以使用-windowDidLoad; 如果您使用的是视图控制器,则可以使用-loadView; 否则,-applicationDidFinishLaunching:在您的申请代表中.
| 归档时间: | 
 | 
| 查看次数: | 4548 次 | 
| 最近记录: |