假設(爲了參數)我有一個包含NSDictionary的視圖類。我想要一大堆屬性,所有這些屬性都可以訪問該字典的成員。在Cocoa中編寫我自己的@dynamic屬性
例如,我想要@property NSString* title
和@property NSString* author
。
對於這些屬性中的每一個,實現都是相同的:對於getter,請調用[dictionary objectForKey:propertyName];
,setter對setObject:forKey:執行相同的操作。
這將花費大量的時間並使用大量的複製粘貼代碼來編寫所有這些方法。有沒有一種方法可以自動生成它們,就像Core Data用NSManagedObject子類的@dynamic屬性一樣?清楚的是,我只想用這種方式訪問我在頭文件中定義的屬性,而不是任何任意的鍵。
我遇到過valueForUndefinedKey:作爲鍵值編碼的一部分,它可以處理getter,但我不完全確定這是否是最好的方法。
我需要這些是顯式屬性,所以我可以在Interface Builder中將它們綁定到它們:我最終計劃爲此視圖編寫一個IB調色板。我寫了一個WebView的子類,屬性會引用HTML元素的ID,但這並不重要,因爲這對於使用NSDictionary來存儲這些元素來說是不重要的。我的問題的邏輯!)
我只會做小寫的第一個字母(並確保_cmd字符串至少有5個字符): NSString * property = NSStringFromSelector(_cmd); NSString * firstLetter = [[property substringWithRange:NSMakeRange(3,1)] lowercaseString]; property = [firstLetter stringByAppendingString:[property substringWithRange:NSMakeRange(4,[property length] - 5)]]; – charles 2012-12-04 09:57:38
很好的例子。我得到的只是一種凍結的IMP(即對於'setName:'我的IMP是'setValueForName'),但是您使用'NSStringFromSelector(_cmd)'給了我準確的踢我正在尋找的精神褲子把它推廣到'setWhatever:'。感謝您撰寫它。 – matt 2012-12-11 16:34:51