绑定到可可中的类方法?

| 如果我有类似的方法:
@interface CharacterSet
    + (NSArray *)allCharacterSets;
@end
我可以使用可可粉绑定到它吗? 我正在尝试将NSComboBox的内容值连接到它。当我在IB的\“ Model Key Path \”字段中输入
CharacterSet.allCharacterSets
时,它不起作用,并说:   [   addObserver:   forKeyPath:@ \“ CharacterSet.allCharacterSets \”   选项:0x0上下文:0x200275b80]原为   发送到不是   符合KVC的\“ CharacterSet \\”   属性。 我不确定还有什么尝试。目前,我必须在自定义窗口控制器(或自定义窗口)中将
allCharacterSets
的返回值存储到一个ivar中,以使其正常工作,这似乎是我不应该采取的额外步骤。     
已邀请:
我正在处理一个巨大的应用程序,而您提到的额外步骤对我来说真的很痛苦。因此,我开发了一个用于处理类方法绑定的小型代理类。 首先,我添加了一个小型代理类
@implementation INClassProxy

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

@end
然后将类别访问器添加到NSApplication
- (id)classProxy {
    static INClassProxy *proxy = nil;
    if (proxy == nil)
        proxy = [[INClassProxy alloc] init];
    return proxy;
}
(我实际上将此添加到了我的应用程序委托中并实现了application:delegateHandlesKey :) 现在,您可以使用keyPath“ 5”将类方法绑定到Application对象,甚至在接口构建器中。     
@cocoafan ..我在冒昧的评论中意识到..我说的例子可能无法奏效,除非您按照我选择的那样实际执行您的GENIUS答案...为了使这种头脑麻木(而且简单)魔术更加通用和有用...我只是按照您的描述创建了一个基础类,但是没有对
NSApplication
进行分类(就是所谓的?),而是对
NSObject
进行了分类。下面的完整示例...
@interface AZClassProxy : NSObject
@end
@interface NSObject (AZClassProxy)
- (id)classProxy;
@end
@implementation AZClassProxy
- (id) valueForUndefinedKey:(NSString*)k { return NSClassFromString(k); }
@end
@implementation NSObject (AZClassProxy)
- (id) classProxy { static AZClassProxy *prx = nil; return prx = prx ?: AZClassProxy.new; }
@end
编辑...大约两天后,我的头脑变得简单起来,试图记住这是谁的作品,以及它为何如此精彩。我将继续在这里发布信息,因为我必须做一些事情来提醒自己这是什么,以及我为什么要关心..所以一个基本的例子。
NSObject *WHATEVS = NSObject.new;
NSLog(@\"%@\", [[WHATEVS.classProxy valueForKey:@\"NSColor\"] redColor]);
日志
NSCalibratedRGBColorSpace 1 0 0 1
    

要回复问题请先登录注册