通常狀況下IOS得局部頁面加載的過程是,建立一個Model而後,將Nib文件與Model進行關聯,而後可以快速的獲取到Nib文件上的控件實例。操做生成頁面。spa
可是原生的內容是沒有直接經過Json獲取Model只能生成字典。而後轉換爲Model。下列方法就是經過字典來轉換爲Model的過程。.net
首先是要添加對應的使用的頭文件#import <objc/runtime.h>code
而後添加下面幾個方法blog
Model從字典中填充數據ci
/* * 從字典中填充數據 */ -(int)reflectDataFromDictionary:(NSDictionary *)dic { unsigned int useCount ,outCount; Ivar *ivars = class_copyIvarList([self class], &outCount); for (const Ivar *p = ivars; p < ivars + outCount; p++) { Ivar const ivar = *p; //獲取變量名 NSString *varName = [NSString stringWithUTF8String:ivar_getName(ivar)]; //獲取變量值 id varValue = [self valueForKey:varName]; //若是是直接包含此名稱的 if ([dic.allKeys containsObject:varName]) { varValue = [dic objectForKey:varName]; useCount++; }else{ NSString *tmp_varName = [self removeFirstUnderlined:varName]; if ([dic.allKeys containsObject:tmp_varName]) { varValue = [dic objectForKey:tmp_varName]; useCount++; } } [self setValue:varValue forKey:varName]; } return useCount; }
兩個輔助方法rem
/* * 移除掉第一個下劃線 */ -(NSString *)removeFirstUnderlined:(NSString *)str { if ([[str substringToIndex:1] isEqual:@"_"]) { return [str substringFromIndex:1]; } return str; } /* * 獲取全部屬性 */ - (NSArray*)propertyKeys { unsigned int outCount, i; objc_property_t *properties = class_copyPropertyList([self class], &outCount); NSMutableArray *keys = [[NSMutableArray alloc] initWithCapacity:outCount]; for (i = 0; i < outCount; i++) { objc_property_t property = properties[i]; NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; [keys addObject:propertyName]; } free(properties); return keys; }
將Model轉換爲字典get
/* * 轉換爲字典 */ -(NSDictionary *)convertToDictionary { NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; for (NSString *key in [self propertyKeys]) { id propertyValue = [self valueForKey:key]; [dic setObject:propertyValue forKey:key]; } return dic; }
抽空寫了一個Demo出來,GitHub死活上傳不上去,因此放到CSDN上去了。若是須要的話能夠Down下來看看http://download.csdn.net/detail/anxin1225/8190975string
而後,就沒有而後了……it