2013-07-28 48 views
1

我正在爲iPhone開發。有沒有辦法使用NSString獲取屬性來保存屬性名稱?是這樣的:我如何使用NSString獲取NSObject的屬性

@interface MyLovelyClass : NSObject 

@property (nonatomic) double test; 

-(double) returnDoubleProperty:(NSString *) propertyName; 

,然後調用它

MyLovelyClass *mlc=[[MyLovelyClass alloc] init]; 
double value=[mlc returnDoubleProperty:@"test"]; 

我明白,如果我有屬性的數量有限,我可以手動的if else語句,將返回值爲每個輸入字符串寫入。但是,有沒有什麼辦法可以達到這個綱領性?

+0

使用一個NSDictionary? –

+1

http://stackoverflow.com/questions/6179427/objective-c-get-a-class-property-from-string – user523234

回答

6

你想使用KVC(鍵值編碼),它完全符合你的描述,但你不需要實現任何方法來工作。它使用對象,但這樣你double將一個NSNumber內部包裹:

@property (nonatomic, strong) NSNumber *test; 

NSNumber *value = [mlc valueForKey:@"test"]; 
+0

它可以與任何NSObject的後代一起工作嗎? – zaitsman

+0

Wain,似乎是實現我想要的最好方式。非常感謝! – zaitsman

3

由於性能的方法,你可以叫他們通過performSelector:。要從字符串中選擇使用NSSelectorFromString。該double將被包裹在NSNumber類型的id對象,所以你需要通過調用doubleValue拉回來:

SEL toCall = NSSelectorFromString(@"test"); 
double value=[[mlc performSelector:toCall] doubleValue]; 
相關問題