我正在嘗試學習Objective-C中的反射。我發現了一些關於如何轉儲一個類的屬性列表的很好的信息,尤其是here,但我想知道是否可以使用反射設置屬性的值。使用反射設置Objective-C類的屬性值
我有一個鍵(屬性名稱)和值的字典(所有NSString
s)。我想用Reflection來獲取屬性,然後將其值設置爲我的字典中的值。這可能嗎?還是我在做夢?
這與字典無關。我只是使用字典來發送值。
像this question,但是對於目的C.
- (void)populateProperty:(NSString *)value
{
Class clazz = [self class];
u_int count;
objc_property_t* properties = class_copyPropertyList(clazz, &count);
for (int i = 0; i < count ; i++)
{
const char* propertyName = property_getName(properties[i]);
NSString *prop = [NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]];
// Here I have found my prop
// How do I populate it with value passed in?
}
free(properties);
}
這是反射。當您使用此方法時,會調用屬性mutator和訪問器。 – 2014-08-28 15:20:25
@Lucy ['setValue:forKey:'](https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/doc/ uid/20000471-BABEHECF)是'NSObject'符合的'NSKeyValueCoding'協議的一部分。它與字典無關;你正在考慮'setObject:forKey:',它是'NSMutableDictionary'上的一個方法。 – 2014-08-28 16:09:41
@Lucy'setValue:forKey:'跳過一堆箍,找到setter,然後調用它。這是反思。這通常是要避免的。 – bbum 2014-08-29 20:50:44