2013-10-11 146 views
0

設定屬性我有我延伸並添加一個屬性(propOne)一類(SomeClass)。 我也想在這個類上添加一個類別(CategoryName)來創建一個方法來修改擴展中添加的屬性。經由方法類擴展類類別

我得到一個編譯器錯誤消息說[SomeClass setPropOne:] unrecognized selector...

我是很新,Objective-C的 - 如何在一個類中創建一個方法修改通過擴展添加的屬性?

我想我正在試圖做的可以用代碼來最好的解釋:

@interface SomeClass() 

@property (nonatomic,weak) id propOne 

@end 

... 
... 


@implementation SomeClass (CategoryName) 

- (void)someMethodWithParam:(id)param 
{ 
self.propOne = param; 
} 

@end 

回答

0

這是不可能的@property添加到類別開箱。然而,有涉及創建這樣的一個解決辦法:

static const char kMyChar; 

並將其綁定到該類別通過東西(使之成爲一個「關聯對象」)是這樣的:

objc_setAssociatedObject(self, &kMyChar, alertWrapper, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

看看here要獲得一個很好的示例「爲基於數據塊的UIAlertView類別添加屬性」的示例的完整文檔...

0

自動合成機制可以合成在類擴展中聲明的屬性,只有當類擴展名可見編譯實現。因此,如果示例中顯示的類擴展名爲SomeClass.hSomeClass.m,則屬性將被合成。

否則,該類擴展提供了一個聲明(在這種情況下,至少)不存在的財產,這就是爲什麼你看到一個運行時異常,當您嘗試訪問它。要解決這個問題,您可以在SomeClass (CategoryName)類別中自己實現訪問器方法。

,你可能會面臨接着的問題是,是,有沒有辦法讓一個給定的類實例變量添加到另一個階級。請參閱Alfie Hansen的答案,爲此提供可能的解決方法。