ios怎么自动生成model里面的属性代码

 我来答
独立说教育
2016-12-12 · 传媒培训、投行培训、实习内推
独立说教育
独立说教育科技(北京)有限公司专注于大学生实习培训,致力于帮助年轻人步入职场的互联网平台,帮助每一位大学生更快地进入WORK-READY状态,完成从学生到职业人的蜕变,快速步入传媒、金融行业。
向TA提问
展开全部
一、获取Model的实体属性
1.要想遍历Model类的属性,首先得通过Runtime来获取该Model类有哪些属性,输出Model的所有属性的值可不像遍历Dictionary和Array那样一个for循环搞定的,下面的方法是通过Runtime来获取Model类的属性字符串,并以数组的形式返回。代码如下:

///通过运行时获取当前对象的所有属性的名称,以数组的形式返回
- (NSArray *) allPropertyNames{
///存储所有的属性名称
NSMutableArray *allNames = [[NSMutableArray alloc] init];

///存储属性的个数
unsigned int propertyCount = 0;

///通过运行时获取当前类的属性
objc_property_t *propertys = class_copyPropertyList([self class], &propertyCount);

//把属性放到数组中
for (int i = 0; i < propertyCount; i ++) {
///取出第一个属性
objc_property_t property = propertys[i];

const char * propertyName = property_getName(property);

[allNames addObject:[NSString stringWithUTF8String:propertyName]];
}

///释放
free(propertys);

return allNames;
}

2.获取到Model类的属性方法后需要把属性字符串生成get方法,我们可以执行get方法来获取Model属性的值,下方的方法是根据属性字符串来获取属性的getter方法,OC中属性的getter方法的名字和属性的名字是一致的,生成getter方法比较简单,具体代码如下:

#pragma mark -- 通过字符串来创建该字符串的Setter方法,并返回
- (SEL) creatGetterWithPropertyName: (NSString *) propertyName{

//1.返回get方法: oc中的get方法就是属性的本身
return NSSelectorFromString(propertyName);
}

二、Get方法的执行
接下来要做的是通过Runtime来执行Getter方法,这一块需要通过方法的签名来执行Getter方法。在OC的运行时中要执行的方法需要传入参数或者需要接收返回值时,需要通过方法的签名来调用方法。下面的代码就是创建方法的签名,然后通过签名来获取调用的对象,在下边的方中回调用上述两个方法在通过方法的签名来获取Model属性的值,具体代码如下:

- (void) displayCurrentModleProperty{

//获取实体类的属性名
NSArray *array = [self allPropertyNames];

//拼接参数
NSMutableString *resultString = [[NSMutableString alloc] init];

for (int i = 0; i < array.count; i ++) {

//获取get方法
SEL getSel = [self creatGetterWithPropertyName:array[i]];

if ([self respondsToSelector:getSel]) {

//获得类和方法的签名
NSMethodSignature *signature = [self methodSignatureForSelector:getSel];

//从签名获得调用对象
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];

//设置target
[invocation setTarget:self];

//设置selector
[invocation setSelector:getSel];

//接收返回的值
NSObject *__unsafe_unretained returnValue = nil;

//调用
[invocation invoke];

//接收返回值
[invocation getReturnValue:&returnValue];

[resultString appendFormat:@"%@\n", returnValue];
}
}
NSLog(@"%@", resultString);

}

执行上述方法就可以输入Model中的属性的值,下面就在main函数中对Model赋完值后调用上述方法输出一下Model的属性值,调用代码如下所示:

BeautifulGirlModel *beautifulGirl = [BeautifulGirlModel modelWithDictionary:data];

[beautifulGirl displayCurrentModleProperty];

运行结果如下,下面的输出结果是Model中属性的值。
喜大普奔儿
2018-09-19
知道答主
回答量:3
采纳率:0%
帮助的人:2401
展开全部

也许你需要这个。iOS自动生成Model GitHub:网页链接

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式