gpt4 book ai didi

objective-c - 为什么我的 Cocoa 绑定(bind)损坏了?

转载 作者:行者123 更新时间:2023-12-03 17:36:30 26 4
gpt4 key购买 nike

我有一个带有 NSTextField 的窗口(在 Snow Leopard 中),我已将其绑定(bind)到 WindowController 类中的 NSString 函数。该字符串将结合我的数组 Controller 提供的有关 TableView 的选择和计数的信息。它获得一个初始值 "0 0" ,但当选择或计数发生变化时,永远不会更新。绑定(bind)如下所示(文件的所有者是 MyWindowController):

alt text

我实现了+ (NSSet *)keyPathsForValuesAffecting<key> (如下),但即使数组 Controller 的总计数和选择发生变化,绑定(bind)也永远不会更新。

(执行了其他故障排除)我最初使用的是 NSTextField 的显示模式值绑定(bind),但我需要比该绑定(bind)提供的更复杂的逻辑。然后,我开始监听 TableView 的选择更改/更改事件,该事件显示数组 Controller 的内容并动态更改显示模式值绑定(bind),但这感觉像是黑客攻击,而且过于复杂。

我确信我遗漏了一些东西,但我不知道是什么。有人有什么想法吗?我已经阅读了苹果的键值观察文档,这似乎就是所需要的。我查了一下,我的keyPathsForValuesAffectingMyString正在接到电话,但是 myString只被调用一次。我在下面提炼了我的代码(更新了 x3)。

更新1/21

我仍在努力解决这个问题。当我 addObserverself对于 arrayController 键路径,通知确实按预期触发,因此我的键路径和键值观察机制很好。当我调用[self didChangeValueForKey:@"myString"];时在我的observeValueForKeyPath内使用相同的键的方法,绑定(bind)仍然没有更新,这让我相信这是绑定(bind)问题而不是 KVO 问题。我将进一步阅读绑定(bind)机制...

@interface MyWindowController : NSWindowController {
IBOutlet NSArrayController *arrayController;
}

- (NSArrayController *)arrayController;
- (NSString *)myString;

@end

@implementation MyWindowController

+ (NSSet *)keyPathsForValuesAffectingMyString {
return [NSSet setWithObjects:
@"arrayController.arrangedObjects",
@"arrayController.selection",
nil];
}

- (NSArrayController *)arrayController {
return arrayController;
}

- (NSString *)myString {
// Just as an example; I have more complicated logic going on in my real code
return [NSString stringWithFormat:@"%@, %@",
[arrayController valueForKeyPath:@"arrangedObjects.@count"],
[arrayController valueForKeyPath:@"selection.@count"]];
}

@end

最佳答案

我已经验证了这个完全相同的错误。 Cocoabuilder 上的某人猜测了错误发生的原因:

http://www.cocoabuilder.com/archive/cocoa/284396-why-doesn-nsarraycontroller-selection-et-al-fire-keypathsforvaluesaffectingkey.html#284400

我无法确定这个解释是否正确,但我当然无法让 +keyPathsForValues... 与 NSArrayControllers 一起使用。

关于objective-c - 为什么我的 Cocoa 绑定(bind)损坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4699433/

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