I am trying to dynamically determine the type of a property in Objective-C. Based on what I read on this site and elsewhere, I believe that I am doing the right thing. However, my code does not work.
Below is a snippet of code below. Attempting to obtain property information for "backgroundColor" and "frame", both of which are valid UIView properties, fails (class_getProperty () returns NULL):
id type = [UIView class]; objc_property_t backgroundColorProperty = class_getProperty(type, "backgroundColor"); fprintf(stdout, "backgroundColorProperty = %d\n", (int)backgroundColorProperty); // prints 0 objc_property_t frameProperty = class_getProperty(type, "frame"); fprintf(stdout, "frameProperty = %d\n", (int)frameProperty); // prints 0
Enumerating the properties described here also does not produce the expected results. The following code:
NSLog(@"Properties for %@", type); unsigned int outCount, i; objc_property_t *properties = class_copyPropertyList(type, &outCount); for (i = 0; i < outCount; i++) { objc_property_t property = properties[i]; fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property)); }
generates this output:
2012-03-09 13:18:39.108 IOSTest[2921:f803] Properties for UIView caretRect T{CGRect={CGPoint=ff}{CGSize=ff}},R,N,G_caretRect gesturesEnabled Tc,N deliversTouchesForGesturesToSuperview Tc,N skipsSubviewEnumeration Tc,N viewTraversalMark Tc,N viewDelegate T@ "UIViewController",N,G_viewDelegate,S_setViewDelegate: inAnimatedVCTransition Tc,N,GisInAnimatedVCTransition monitorsSubtree Tc,N,G_monitorsSubtree,S_setMonitorsSubtree: backgroundColorSystemColorName T@ "NSString",&,N,G_backgroundColorSystemColorName,S_setBackgroundColorSystemColorName: userInteractionEnabled Tc,N,GisUserInteractionEnabled tag Ti,N,V_tag layer T@ "CALayer",R,N,V_layer
Documented properties such as "backgroundColor", "frame" and others are missing, while undocumented properties such as "caretRect" and "gesturesEnabled" are included.
Any help would be greatly appreciated. In case it matters, I see this behavior on the iOS simulator. I donโt know if the same thing will happen on the device itself.
Thanks Greg