2011-04-19 27 views
3

如果我有像一個方法:使用Cocoa綁定綁定到Cocoa中的類方法?

@interface CharacterSet 
    + (NSArray *)allCharacterSets; 
@end 

我可以綁定到它?

我想掛鉤一個NSComboBox的內容值給它。當我進入到CharacterSet.allCharacterSets在IB 「模型關鍵路徑」 欄,這是行不通的,他說:

[ 的addObserver: forKeyPath:@ 「CharacterSet.allCharacterSets」 選項:爲0x0背景:0x200275b80]被髮送到 的對象不是 符合KVC的「CharacterSet」 屬性。

我不確定還有什麼可以嘗試的。目前我必須在我的自定義窗口控制器(或自定義窗口)中將allCharacterSets的返回值存儲到ivar中以使其工作,這似乎是我不應該採取的額外步驟。

回答

5

我正在處理一個巨大的應用程序,你提到的額外步驟真的很痛苦在我的屁股。所以我開發了一個處理類方法綁定的小型代理類。

首先我添加了一個小的代理類

@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 @"classProxy.CharacterSet.allCharacterSets"

+1

很聰明,優雅解。 – alexantd 2011-10-06 19:07:25

+0

這是目前爲止最好的裝訂片段_hocus-pocus_ **曾經發明過的**。詳細闡述完美...繼續並在IB中創建一個「通用,藍色立方體」NSObject實例...然後將綁定到您的心中單個對象的內容與儘可能多的「東西」,只要你想...每次只改變關鍵路徑。 。ie ..你想要綁定一個'NSPopupButton'到一個'NSArray',它返回到'NSColor'上的一個類方法,例如...將該按鈕綁定到'classProxy.NSColor.colorLists'。關於這一點如此激烈的是,這個單一的出口是通向任何「NSObject」的門戶! – 2013-04-19 00:09:04

0

@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 

bound by class

編輯...之後如2那時的我,心中的簡單摺疊試圖記住誰工作的,以及它爲什麼如此美妙。我會繼續在這裏張貼,因爲我必須做的事情想起了什麼,這是我自己,我爲什麼要在乎。所以一個基本的例子..

NSObject *WHATEVS = NSObject.new; 
NSLog(@"%@", [[WHATEVS.classProxy valueForKey:@"NSColor"] redColor]); 

LOGNSCalibratedRGBColorSpace 1 0 0 1

+0

謝謝。我真的不記得爲什麼我選擇了NSApplication。 – cocoafan 2013-04-19 15:31:04

相關問題