ios怎么自动生成model里面的属性代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios怎么自动生成model里面的属性代码相关的知识,希望对你有一定的参考价值。
参考技术A 一、获取Model的实体属性1.要想遍历Model类的属性,首先得通过Runtime来获取该Model类有哪些属性,输出Model的所有属性的值可不像遍历Dictionary和Array那样一个for循环搞定的,下面的方法是通过Runtime来获取Model类的属性字符串,并以数组的形式返回。代码如下:///通过运行时获取当前对象的所有属性的名称,以数组的形式返回-(NSArray*)allPropertyNames///存储所有的属性名称NSMutableArray*allNames=[[NSMutableArrayalloc]init];///存储属性的个数unsignedintpropertyCount=0;///通过运行时获取当前类的属性objc_property_t*propertys=class_copyPropertyList([selfclass],&propertyCount);//把属性放到数组中for(inti=0;i<propertyCount;i++)///取出第一个属性objc_property_tproperty=propertys[i];constchar*propertyName=property_getName(property);[allNamesaddObject:[NSStringstringWithUTF8String:propertyName]];///释放free(propertys);returnallNames;2.获取到Model类的属性方法后需要把属性字符串生成get方法,我们可以执行get方法来获取Model属性的值,下方的方法是根据属性字符串来获取属性的getter方法,OC中属性的getter方法的名字和属性的名字是一致的,生成getter方法比较简单,具体代码如下:#pragmamark--通过字符串来创建该字符串的Setter方法,并返回-(SEL)creatGetterWithPropertyName:(NSString*)propertyName//1.返回get方法:oc中的get方法就是属性的本身returnNSSelectorFromString(propertyName);二、Get方法的执行接下来要做的是通过Runtime来执行Getter方法,这一块需要通过方法的签名来执行Getter方法。在OC的运行时中要执行的方法需要传入参数或者需要接收返回值时,需要通过方法的签名来调用方法。下面的代码就是创建方法的签名,然后通过签名来获取调用的对象,在下边的方中回调用上述两个方法在通过方法的签名来获取Model属性的值,具体代码如下:-(void)displayCurrentModleProperty//获取实体类的属性名NSArray*array=[selfallPropertyNames];//拼接参数NSMutableString*resultString=[[NSMutableStringalloc]init];for(inti=0;i<array.count;i++)//获取get方法SELgetSel=[selfcreatGetterWithPropertyName:array[i]];if([selfrespondsToSelector:getSel])//获得类和方法的签名NSMethodSignature*signature=[selfmethodSignatureForSelector:getSel];//从签名获得调用对象NSInvocation*invocation=[NSInvocationinvocationWithMethodSignature:signature];//设置target[invocationsetTarget:self];//设置selector[invocationsetSelector:getSel];//接收返回的值NSObject*__unsafe_unretainedreturnValue=nil;//调用[invocationinvoke];//接收返回值[invocationgetReturnValue:&returnValue];[resultStringappendFormat:@"%@\n",returnValue];NSLog(@"%@",resultString);执行上述方法就可以输入Model中的属性的值,下面就在main函数中对Model赋完值后调用上述方法输出一下Model的属性值,调用代码如下所示:BeautifulGirlModel*beautifulGirl=[BeautifulGirlModelmodelWithDictionary:data];[beautifulGirldisplayCurrentModleProperty];运行结果如下,下面的输出结果是Model中属性的值。iOS--数组添加多个模型修改一个全都改变
参考技术A 首先,如果你遇到修改数组里面的其中一个模型导致所有的模型改变了这个问题,先不管别的,你先打印下你的数组里面的模型看是否同一个,不出意外,应该和下面的一样:完成了这些操作后,现在就开始 copy 了,如果我们有一个model1的实例,然后调用以下方法:
这样我们就成功的用上面copyWithZone的方法创建一个model1的副本,然后赋值给了model2,再添加至数组,经过这样操作,你再打印下数组里面的模型,不出意外,变成了:
可以看出,和之前对比,模型地址不同了,这下你再试下修改一个一个模型的值,其它模型的值就不会跟着变了!!!
以上是关于ios怎么自动生成model里面的属性代码的主要内容,如果未能解决你的问题,请参考以下文章
在django form里面要怎么显示数据库中已有的数据,并更新数据?
ios,怎么做打开一个界面,里面的textfield自动打开键盘,提示你输入?
unity3d里面 ,点击一下按钮然后自动修改人物属性数据,比如说攻击力增加等等的代码怎么编写?