2017-08-03 65 views
0

我有下面的代碼行:UIButton的這類不是關鍵值代碼兼容的鍵

[self.someBtn setValue:@"some-value" forKey:@"some-key"]; 

其中someBtn是從故事板結合。 問題是,我得到這個錯誤:如果我評論這行代碼它的工作原理

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIButton 0x137e7deb0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key some-key.' 

。我只想通過使用setValue:forKey函數通過UIButton傳遞一些「元」信息。

有人可以向我解釋發生了什麼?謝謝!

+0

「我只想通過UIButton傳遞一些」元「信息」 - 爲什麼?你想達到什麼目的?有一個更好的方法來實現你想要做的事情。 –

+0

這個問題與iboutlet有關,請檢查你的按鈕iboutlet –

+0

你的問題不清楚 –

回答

1

這是最簡單的「一些價值附加到按鈕」通過關聯對象。你可以寫UIButton的擴展,它做到了這一點

@interface UIButton (AssociatedObject) 

@property (nonatomic, strong) id associatedObject; 

@end 

@implementation UIButton (AssociatedObject) 
@dynamic associatedObject; 

- (void)setAssociatedObject:(id)object { 
    objc_setAssociatedObject(self, @selector(associatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 

- (id)associatedObject { 
    return objc_getAssociatedObject(self, @selector(associatedObject)); 
} 

您可以閱讀very good article on NSHipster覆蓋使用相關的對象。

請注意,無論您嘗試實際做什麼,都可以通過繼承按鈕或將值存儲在其他位置來更輕鬆地完成。

+0

和一個完整的答案:UIButtons是鍵值兼容,而例如,UIViews不是鍵值兼容的通用鍵,因此設置自定義鍵/值是未被UIButtons授權。在我的情況下,UIButton沒有任何名稱爲「some-key」的屬性。 –

0

您無法使用UIButton傳遞任何信息。你只能設置INT的標籤在你的UIButton喜歡這個 -

self.someBtn.tag = 1; 
+0

我想使用setValueforKey,但感謝回答 –

相關問題