Skip to content

Commit ccb6d47

Browse files
authored
fix the problem that value and property type are unmatched after conversions. (#742)
1 parent 3c6e9ab commit ccb6d47

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

MJExtension/NSObject+MJKeyValue.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,10 @@ - (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)
209209
if (![value isKindOfClass:[NSDecimalNumber class]]) {
210210
value = [NSDecimalNumber decimalNumberWithDecimal:[((NSNumber *)value) decimalValue]];
211211
}
212-
} else if (propertyClass && ![value isKindOfClass:propertyClass]) { // value和property类型不匹配
212+
}
213+
214+
// 经过转换后, 最终检查 value 与 property 是否匹配
215+
if (propertyClass && ![value isKindOfClass:propertyClass]) {
213216
value = nil;
214217
}
215218

MJExtensionTests/MJExtensionTests.m

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,48 @@ @interface MJExtensionTests : XCTestCase
2525

2626
@implementation MJExtensionTests
2727

28+
#pragma mark 类型不匹配类型 -> 模型
29+
- (void)testJSON2ModelUnmatched {
30+
// 1.定义一个字典
31+
NSDictionary *dict = @{
32+
@"name" : @[],
33+
@"icon" : @"lufy.png",
34+
@"age" : @"2147483647",
35+
@"age2": @"4294967295",
36+
@"height" : @1.55,
37+
@"money" : @"100.7777777",
38+
@"sex" : @(SexFemale),
39+
@"gay" : @"1",
40+
@"speed" : @"120.5",
41+
@"identifier" : @"9223372036854775807",
42+
@"identifier2" : @"18446744073709551615",
43+
@"price" : @"20.3",
44+
@"rich" : @"2",
45+
@"collect" : @"40个",
46+
@"alien": @"yr Joking"
47+
};
48+
49+
// 2.将字典转为MJUser模型
50+
MJUser *user = [MJUser mj_objectWithKeyValues:dict];
51+
52+
// 3.检测
53+
XCTAssert(!user.name);
54+
XCTAssert([user.icon isEqual:@"lufy.png"]);
55+
XCTAssert(user.age == INT_MAX);
56+
XCTAssert(user.age2 == UINT_MAX);
57+
XCTAssert([user.height isEqualToNumber:@(1.55)]);
58+
XCTAssert([user.money compare:[NSDecimalNumber decimalNumberWithString:@"100.7777777"]] == NSOrderedSame);
59+
XCTAssert(user.sex == SexFemale);
60+
XCTAssert(user.gay);
61+
XCTAssert(user.speed == 120);
62+
XCTAssert(user.identifier == LONG_LONG_MAX);
63+
XCTAssert(user.identifier2 == ULONG_LONG_MAX);
64+
XCTAssert(user.price == 20.3);
65+
XCTAssert(user.rich);
66+
XCTAssert(user.collect == 40);
67+
XCTAssert(!user.alien);
68+
}
69+
2870
#pragma mark 简单的字典 -> 模型
2971
- (void)testJSON2Model {
3072
// 1.定义一个字典

0 commit comments

Comments
 (0)