最近在看MJExtension的Demo,发现了一个plist文件直接转数组模型的方法。以前研究过但是浅尝辄止没有解决,这几天有时间,好好看了看,找到了解决办法,与大家分享。
如果大家的项目中有这种嵌套数组对象的情况的plist文件,如:
当没有这种复杂嵌套时,我们这样写:
1: -(NSArray *)groups{
2: if (!_groups) {
3:
4: _groups = [Group objectArrayWithFilename:@"cars_total.plist"];
5: }
6: return _groups;
7: }
并没有真正的转成模型,一开始我的解决方法是重写setCars方法,
//-(void)setCars:(NSArray *)cars{ //// NSLog(@"%s",__func__); // _cars = [NSMutableArray array]; // _cars = [Car modelArrayWithDictionaries:cars]; //}
modelArrayWithDictionaries是我自己实现的一个Dictionary数组转对象数组的方法,写的不优雅就不贴出来了。
但是我们实际上是可以这样写的:
写法一:
在Group模型中
1: //+(NSDictionary *)objectClassInArray{2: // return @{@"cars":@"Car"};3: //}
写法二:
在groups属性的getter里
1: (NSArray *)groups{
2: if (!_groups) {
3:
4: [Group setupObjectClassInArray:^NSDictionary *{
5: return @{@"cars":@"Car"};
6: }];
7: _groups = [Group objectArrayWithFilename:@"cars_total.plist"];
8: }
9: return _groups;
10: }
就可以实现直接转换成对象啦!
关于MJExtension Demo中的其他发现:
MJExtension的Demo中将 [x setupObjectClassInArray:…]放到了MJExtensionConfig
类的+load方法中,Demo中其他地方没有任何对该类或该方法的引用。
经过查询,发现原来load是OC中在载入一个类的时候自动调用的方法,真是一个进行配置的好方法!
参考来源:
Objective-C 类方法 load 和 initialize 的区别
原文:http://www.cnblogs.com/zeyang/p/4472656.html