Решенные - см нижеObjC получить имя свойства
Да. Я много искал без успеха.
Я искал способ получить имя свойства как StringValue изнутри метода.
Позволяет сказать:
Мой класс имеет X подвиды от типа UILabel.
@property (strong, nonatomic) UILabel *firstLabel;
@property (strong, nonatomic) UILabel *secondLabel;
[...]
и так далее.
Внутри метода Foo, взгляды повторяются, как следует:
-(void) foo
{
for (UIView *view in self.subviews) {
if([view isKindOfClass:[UILabel class]]) {
/*
codeblock that gets the property name.
*/
}
}
}
Результат должен быть что-то вроде этого:
THE propertyName(NSString) OF view(UILabel) IS "firstLabel"
Я попытался class_getInstanceVariable, object_getIvar и property_getName без успеха.
Для примера, код для:
[...]
property_getName((void*)&view)
[...]
ВОЗВРАЩЕНИЯ:
<UILabel: 0x6b768c0; frame = (65 375; 219 21); text = 'Something'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x6b76930>>
Но я ищу такого результата: "firstLabel", "secondLabel" и скоро.
Благодарим за помощь!
Reagrds JOE
***** Обновление ***
Как и в ответе Graver описано решение: class_copyIvarList, которая возвращает имя Ивара.
Ivar* ivars = class_copyIvarList(clazz, &count);
NSMutableArray* ivarArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const char* ivarName = ivar_getName(ivars[i]);
[ivarArray addObject:[NSString stringWithCString:ivarName encoding:NSUTF8StringEncoding]];
}
free(ivars);
See Сообщений: https://stackoverflow.com/a/2302808/1228534 и Objective C Introspection/Reflection
Большое спасибо вам, ребята!
см этот пост: http://stackoverflow.com/a/2302808/1228534 – graver
возможно дубликат [Objective C Самоанализ/Отражение] (http://stackoverflow.com/questions/2299841/objective-c-introspection-reflection) –
Это именно то, что я ищу! class_copyIvarList выполнил эту работу! большое спасибо!!! –