From 6067e578abc3b53671454a31011ea4c16bf83538 Mon Sep 17 00:00:00 2001 From: Minster Date: Mon, 22 Jan 2018 15:15:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E7=BB=B4?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E8=BD=AC=E5=8C=96=EF=BC=8C=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=A4=9A=E7=BB=B4=E6=B7=B7=E5=90=88=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=BE=85=E6=94=AF=E6=8C=81=EF=BC=8C=E5=87=86=E5=A4=87?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B0=E7=9A=84=E9=85=8D=E7=BD=AE=E7=B1=BB?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8A=A0=E4=BB=A5=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YYModel/NSObject+YYModel.m | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/YYModel/NSObject+YYModel.m b/YYModel/NSObject+YYModel.m index 3d7c470..6aca30c 100644 --- a/YYModel/NSObject+YYModel.m +++ b/YYModel/NSObject+YYModel.m @@ -911,6 +911,9 @@ static void ModelSetValueForProperty(__unsafe_unretained id model, NSObject *newOne = [cls new]; [newOne yy_modelSetWithDictionary:one]; if (newOne) [objectArr addObject:newOne]; + } else if ([one isKindOfClass:[NSArray class]]) { + NSArray *objectArrInner = [NSArray yy_modelArrayWithClass:meta->_genericCls json:one]; + [objectArr addObject:objectArrInner]; } } ((void (*)(id, SEL, id))(void *) objc_msgSend)((id)model, meta->_setter, objectArr); @@ -1795,9 +1798,13 @@ + (NSArray *)yy_modelArrayWithClass:(Class)cls array:(NSArray *)arr { if (!cls || !arr) return nil; NSMutableArray *result = [NSMutableArray new]; for (NSDictionary *dic in arr) { - if (![dic isKindOfClass:[NSDictionary class]]) continue; - NSObject *obj = [cls yy_modelWithDictionary:dic]; - if (obj) [result addObject:obj]; + if ([dic isKindOfClass:[NSDictionary class]]) { + NSObject *obj = [cls yy_modelWithDictionary:dic]; + if (obj) [result addObject:obj]; + } else if ([dic isKindOfClass:[NSArray class]]) { + NSArray *objectArrInner = [NSArray yy_modelArrayWithClass:cls json:dic]; + [result addObject:objectArrInner]; + } } return result; } From 708049f88eb4cd83b7aafb7ad327606ca0b8fe29 Mon Sep 17 00:00:00 2001 From: Minster Date: Mon, 22 Jan 2018 17:33:33 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YYModelTests/YYTestAutoTypeConvert.m | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/YYModelTests/YYTestAutoTypeConvert.m b/YYModelTests/YYTestAutoTypeConvert.m index 2de2d2f..a3a4f16 100644 --- a/YYModelTests/YYTestAutoTypeConvert.m +++ b/YYModelTests/YYTestAutoTypeConvert.m @@ -430,6 +430,20 @@ - (void)testArrayAndDic { array = [NSArray yy_modelArrayWithClass:YYTestAutoTypeModel.class json:[YYTestHelper jsonObjectFromString:json]]; XCTAssertTrue(array.count == 3); XCTAssertTrue([array.firstObject isKindOfClass:[YYTestAutoTypeModel class]]); + + + json = @"[[[{\"v\":1},{\"v\":2},{\"v\":[[{\"v\":1},{\"v\":2},{\"v\":3}]]}]]]"; + NSArray *> *mutiArray = [NSArray yy_modelArrayWithClass:YYTestAutoTypeModel.class json:json]; + XCTAssertTrue(mutiArray.count == 1); + XCTAssertTrue([mutiArray.firstObject.firstObject.firstObject isKindOfClass:[YYTestAutoTypeModel class]]); + + mutiArray = [NSArray yy_modelArrayWithClass:YYTestAutoTypeModel.class json:[YYTestHelper jsonDataFromString:json]]; + XCTAssertTrue(mutiArray.count == 1); + XCTAssertTrue([mutiArray.firstObject.firstObject.firstObject isKindOfClass:[YYTestAutoTypeModel class]]); + + mutiArray = [NSArray yy_modelArrayWithClass:YYTestAutoTypeModel.class json:[YYTestHelper jsonObjectFromString:json]]; + XCTAssertTrue(mutiArray.count == 1); + XCTAssertTrue([mutiArray.firstObject.firstObject.firstObject isKindOfClass:[YYTestAutoTypeModel class]]); json = @"{\"a\":{\"v\":1},\"b\":{\"v\":2},\"c\":{\"v\":3}}"; From e2620d2a96af6efc30329bad79f4dd030afbb4a2 Mon Sep 17 00:00:00 2001 From: Minster Date: Thu, 25 Jan 2018 18:00:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YYModelTests/YYTestAutoTypeConvert.m | 2 +- YYModelTests/YYTestCustomClass.m | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/YYModelTests/YYTestAutoTypeConvert.m b/YYModelTests/YYTestAutoTypeConvert.m index a3a4f16..6c1ac76 100644 --- a/YYModelTests/YYTestAutoTypeConvert.m +++ b/YYModelTests/YYTestAutoTypeConvert.m @@ -432,7 +432,7 @@ - (void)testArrayAndDic { XCTAssertTrue([array.firstObject isKindOfClass:[YYTestAutoTypeModel class]]); - json = @"[[[{\"v\":1},{\"v\":2},{\"v\":[[{\"v\":1},{\"v\":2},{\"v\":3}]]}]]]"; + json = @"[[[{\"v\":1},{\"v\":2},{\"v\":3}]]]"; NSArray *> *mutiArray = [NSArray yy_modelArrayWithClass:YYTestAutoTypeModel.class json:json]; XCTAssertTrue(mutiArray.count == 1); XCTAssertTrue([mutiArray.firstObject.firstObject.firstObject isKindOfClass:[YYTestAutoTypeModel class]]); diff --git a/YYModelTests/YYTestCustomClass.m b/YYModelTests/YYTestCustomClass.m index 3b69532..a7e75f6 100644 --- a/YYModelTests/YYTestCustomClass.m +++ b/YYModelTests/YYTestCustomClass.m @@ -98,6 +98,9 @@ - (void)test { XCTAssert([model.users[0] isMemberOfClass:[YYBaseUser class]]); XCTAssert([model.users[1] isMemberOfClass:[YYLocalUser class]]); XCTAssert([model.users[2] isMemberOfClass:[YYRemoteUser class]]); + + model = [YYTestCustomClassModel yy_modelWithJSON:@{@"users" : @[@[jsonUserBase]]}]; + XCTAssert([((NSArray *)(model.users[0]))[0] isMemberOfClass:[YYBaseUser class]]); model = [YYTestCustomClassModel yy_modelWithJSON:@{@"userDict" : @{@"a" : jsonUserBase, @"b" : jsonUserLocal, @"c" : jsonUserRemote}}]; XCTAssert([model.userDict[@"a"] isKindOfClass:[YYBaseUser class]]);