最近在看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中在載入一個類的時候自動調用的方法,真是一個進行配置的好方法!
參考來源: