Browse Source

Merge pull request #210 from iwill/master

modelContainerPropertyGenericClass 方法返回的 _genericCls 应该优先于属性本身的类型
Yaoyuan 8 years ago
parent
commit
34a88d22b6
1 changed files with 3 additions and 4 deletions
  1. 3 4
      YYModel/NSObject+YYModel.m

+ 3 - 4
YYModel/NSObject+YYModel.m

@@ -1007,9 +1007,10 @@ static void ModelSetValueForProperty(__unsafe_unretained id model,
         BOOL isNull = (value == (id)kCFNull);
         BOOL isNull = (value == (id)kCFNull);
         switch (meta->_type & YYEncodingTypeMask) {
         switch (meta->_type & YYEncodingTypeMask) {
             case YYEncodingTypeObject: {
             case YYEncodingTypeObject: {
+                Class cls = meta->_genericCls ?: meta->_cls;
                 if (isNull) {
                 if (isNull) {
                     ((void (*)(id, SEL, id))(void *) objc_msgSend)((id)model, meta->_setter, (id)nil);
                     ((void (*)(id, SEL, id))(void *) objc_msgSend)((id)model, meta->_setter, (id)nil);
-                } else if ([value isKindOfClass:meta->_cls] || !meta->_cls) {
+                } else if ([value isKindOfClass:cls] || !cls) {
                     ((void (*)(id, SEL, id))(void *) objc_msgSend)((id)model, meta->_setter, (id)value);
                     ((void (*)(id, SEL, id))(void *) objc_msgSend)((id)model, meta->_setter, (id)value);
                 } else if ([value isKindOfClass:[NSDictionary class]]) {
                 } else if ([value isKindOfClass:[NSDictionary class]]) {
                     NSObject *one = nil;
                     NSObject *one = nil;
@@ -1019,10 +1020,8 @@ static void ModelSetValueForProperty(__unsafe_unretained id model,
                     if (one) {
                     if (one) {
                         [one yy_modelSetWithDictionary:value];
                         [one yy_modelSetWithDictionary:value];
                     } else {
                     } else {
-                        Class cls = meta->_cls;
                         if (meta->_hasCustomClassFromDictionary) {
                         if (meta->_hasCustomClassFromDictionary) {
-                            cls = [cls modelCustomClassForDictionary:value];
-                            if (!cls) cls = meta->_genericCls; // for xcode code coverage
+                            cls = [cls modelCustomClassForDictionary:value] ?: cls;
                         }
                         }
                         one = [cls new];
                         one = [cls new];
                         [one yy_modelSetWithDictionary:value];
                         [one yy_modelSetWithDictionary:value];