您的位置:首页 > 移动开发 > Objective-C

ios获取类的属性,获取CLPlacemark类所有属性,Declaration of 'objc_property_t' must be imported from module 'objecti

2016-04-08 09:46 831 查看
最近在做的项目中,定位后获得的

CLPlacemark类不知道用哪个属性的值来显示地理位置,所有调试的时候用了获取类的所有属性,再获取属性对应的值。一看就明白用哪个属性显示适合

应该特别注意的是在使用 objc_property_t 时先导入头文件 #import<objc/runtime.h>,否则报错:Declaration
of 'objc_property_t' must be imported from module 'objectiveC.runtime'before it is required.

/**
*  获取CLPlacemark 类的属性。
*
*  @param placeMarks 传入的类,其他类的属性方法类似
*
*  @return 返回存放属性的数组
*/
- (NSArray *)getPlaceMarksAttribute:(id)placeMarks
{
unsigned int count;
objc_property_t *properties = class_copyPropertyList([placeMarks class], &count);
NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];
for(int i = 0; i < count; i++)
{
/*
//  分步取属性
objc_property_t property = properties[i];
NSString *name = [NSString stringWithUTF8String:property_getName(property)];
NSString *attributes = [NSString stringWithUTF8String:property_getAttributes(property)];
NSLog(@"name0000:%@",name);
NSLog(@"attributes0000:%@",attributes);
*/
const char *propertyName =property_getName(properties[i]);
[propertiesArray addObject: [NSString stringWithUTF8String:propertyName]];
}
free(properties);
return propertiesArray;
}


调用的时候打印属性值:

{
NSArray *attributeArr = [self getPlaceMarksAttribute:placeMark];
for (int tt = 0; tt < attributeArr.count; tt ++)
{
//  打印值 使用 valueForKey:
NSLog(@"placeMark.%@:%@", attributeArr[tt], [placeMark valueForKey:attributeArr[tt]]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: