gpt4 book ai didi

cocoa - 为什么我的 KVO 依赖项在 NSArrayController 中不起作用

转载 作者:行者123 更新时间:2023-12-03 16:40:39 25 4
gpt4 key购买 nike

我想使用带有 NSTableViewNSArrayController 来允许多项选择,但仅在选择单个对象时提供选定的对象(并且 nil 当没有选择或选择多个时)。

我尝试使用 NSArrayController 上的类别来实现此功能,如下所示:

@implementation NSArrayController (SelectedObject)

+ (NSSet *)keyPathsForValuesAffectingSelectedObject {
return [NSSet setWithObject:@"selection"];
}

- (id)selectedObject {
// Get the actual selected object (or nil) instead of a proxy.
if (self.selectionIndexes.count == 1) {
return [self arrangedObjects][self.selectionIndex];
}
return nil;
}

@end

由于某种原因,当数组 Controller 的选择发生变化(并且有其他东西正在观察 selectedObject)时,不会调用 selectedObject 方法。这是为什么?

最佳答案

NSArrayControllerselection 属性很奇怪。我不知道当选择更改时,观察它的键值(而不是通过它的路径)是否会产生更改通知。毕竟,它返回一个代理,并且没有理由相信该代理的身份会随着时间的推移而改变。

无论如何,您实际的 selectedObject 方法实际上并不使用 selection(也不应该)。它使用 arrangedObjectsselectionIndexes。因此,您应该返回一个包含来自 +keyPathsForValuesAffectingSelectedObject那些键的集合。

当然,如果您使用基于 View 的表格,则需要确保表格 View 的 selectionIndexes 绑定(bind)绑定(bind)到数组 Controller 的 selectionIndexes 属性,否则数组 Controller 将不知道有关 TableView 中的选择的任何信息。 (对于基于单元格的 TableView ,您通常将列绑定(bind)到数组 Controller , TableView 将根据列的绑定(bind)自动绑定(bind)其自己的绑定(bind)。)

最后,我认为您应该为selectedObject选择一个不同的名称。 Apple 很可能有一个同名的私有(private)方法,或者将来会添加一个。

关于cocoa - 为什么我的 KVO 依赖项在 NSArrayController 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32396261/

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