1. 程式人生 > >反射--> 屬性賦值

反射--> 屬性賦值

bundle nil error: 技術 oftype com nco err alloc

Persons.json文件

[
 {
 "name": "Chris",
 "age": 18,
 "city": "Shanghai",
 "job": "iOS"
 },
 {
 "name": "Ada",
 "age": 16,
 "city": "Beijing",
 "job": "student"
 },
 {
 "name": "Rita",
 "age": 17,
 "city": "Xiamen",
 "job": "HR"
 }
 ]

Model.h類

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface PersonModel : NSObject
4 5 @property (nonatomic, copy) NSString *name; 6 @property (nonatomic, assign) NSInteger age; 7 @property (nonatomic, copy) NSString *city; 8 @property (nonatomic, copy) NSString *job; 9 @property (nonatomic, copy) NSString *sex; 10 11 - (instancetype)initWithNSDictionary:(NSDictionary *)dict;
12 13 @end

Model.m類

 1 #import "PersonModel.h"
 2 #import <objc/runtime.h>
 3 
 4 @implementation PersonModel
 5 
 6 - (instancetype)initWithNSDictionary:(NSDictionary *)dict {
 7     self = [super init];
 8     if (self) {
 9         [self prepareModel:dict];
10     }
11     return self;
12
} 13 14 - (void)prepareModel:(NSDictionary *)dict { 15 NSMutableArray *keys = [[NSMutableArray alloc] init]; 16 17 u_int count = 0; 18 objc_property_t *properties = class_copyPropertyList([self class], &count); 19 for (int i = 0; i < count; i++) { 20 objc_property_t property = properties[i]; 21 const char *propertyCString = property_getName(property); 22 NSString *propertyName = [NSString stringWithCString:propertyCString encoding:NSUTF8StringEncoding]; 23 [keys addObject:propertyName]; 24 } 25 free(properties); 26 27 for (NSString *key in keys) { 28 if ([dict valueForKey:key]) { 29 [self setValue:[dict valueForKey:key] forKey:key]; 30 } 31 } 32 } 33 34 @end

調用

1 NSString *file = [[NSBundle mainBundle] pathForResource:@"Persons" ofType:@"json"];
2     NSData *data = [NSData dataWithContentsOfFile:file];
3     NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
4     
5     for (NSDictionary *model in array) {
6         PersonModel *person = [[PersonModel alloc] initWithNSDictionary:model];
7         NSLog(@"%@, %ld, %@, %@", person.name, (long)person.age, person.city, person.job);
8     }

打印結果:

技術分享圖片

反射--> 屬性賦值