绑定到Cocoa中的类方法?

ale*_*ntd 3 static-methods key-value-coding cocoa-bindings

如果我有一个像这样的方法:

@interface CharacterSet
    + (NSArray *)allCharacterSets;
@end
Run Code Online (Sandbox Code Playgroud)

我可以使用Cocoa绑定绑定它吗?

我正在尝试将NSComboBox的内容值连接到它.当我进入CharacterSet.allCharacterSetsIB中的"模型密钥路径"字段时,它不起作用,说:

[addObserver:forKeyPath:@"CharacterSet.allCharacterSets"选项:0x0上下文:0x200275b80]被发送到与"CharacterSet"属性不符合KVC的对象.

我不知道还有什么可以尝试的.目前我必须allCharacterSets在我的自定义窗口控制器(或自定义窗口)中将返回值存储到ivar中以使其工作,这似乎是我不应该采取的额外步骤.

coc*_*fan 5

我正在研究一个巨大的应用程序,你提到的额外步骤对我来说真是太痛苦了.所以我开发了一个处理类方法绑定的小代理类.

首先,我添加了一个小代理类

@implementation INClassProxy

- (id)valueForUndefinedKey:(NSString *)key {
    return NSClassFromString(key);
}

@end
Run Code Online (Sandbox Code Playgroud)

然后为NSApplication添加了一个类别访问器

- (id)classProxy {
    static INClassProxy *proxy = nil;
    if (proxy == nil)
        proxy = [[INClassProxy alloc] init];
    return proxy;
}
Run Code Online (Sandbox Code Playgroud)

(其实我已将此添加到我的应用程序委托,并实现应用:delegateHandlesKey: )

现在,您已准备好使用keyPath将类方法绑定到Application对象,即使在接口构建器中也是如此@"classProxy.CharacterSet.allCharacterSets".

  • 非常聪明和优雅的解决方案。 (2认同)