Skip to content

Commit 84c09b8

Browse files
authored
Another implementation: NSNull -> nil (replace NSNull -> [NSDictionary dictionary]) (#701)
1 parent 837e5e3 commit 84c09b8

File tree

4 files changed

+53
-5
lines changed

4 files changed

+53
-5
lines changed

Example/MJExtensionExample/main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ void keyValuesArray2objectArray(void);
2020
void object2keyValues(void);
2121
void objectArray2keyValuesArray(void);
2222
void coreData(void);
23+
void nullSituations(void);
2324
void coding(void);
2425
void replacedKeyFromPropertyName121(void);
2526
void newValueFromOldValue(void);

Example/MJExtensionExample/main.m

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ int main(int argc, char * argv[]) {
5050
execute(replacedKeyFromPropertyName121, @"统一转换属性名(比如驼峰转下划线)");
5151
execute(newValueFromOldValue, @"过滤字典的值(比如字符串日期处理为NSDate、字符串nil处理为@""");
5252
execute(logAllProperties, @"使用MJExtensionLog打印模型的所有属性");
53+
execute(nullSituations, @"测试有关 Null 的情况");
5354

5455
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
5556
}
@@ -250,7 +251,6 @@ void keyValuesArray2objectArray()
250251
@"name" : @"Jack",
251252
@"icon" : @"lufy.png",
252253
},
253-
254254
@{
255255
@"name" : @"Rose",
256256
@"icon" : @"nami.png",
@@ -323,7 +323,6 @@ void objectArray2keyValuesArray()
323323
MJUser *user2 = [[MJUser alloc] init];
324324
user2.name = @"Rose";
325325
user2.icon = @"nami.png";
326-
327326
NSArray *userArray = @[user1, user2];
328327

329328
// 2.将模型数组转为字典数组
@@ -356,6 +355,46 @@ void coreData()
356355
MJExtensionLog(@"name=%@, icon=%@, age=%d, height=%@, money=%@, sex=%d, gay=%d", user.name, user.icon, user.age, user.height, user.money, user.sex, user.gay);
357356
}
358357

358+
void nullSituations() {
359+
NSNull *null = [NSNull null];
360+
id obj2 = [null mj_keyValues];
361+
MJExtensionLog(@"%@", obj2);
362+
363+
MJUser *user1 = [[MJUser alloc] init];
364+
user1.name = @"user1";
365+
MJUser *user2 = [[MJUser alloc] init];
366+
user2.name = @"user2";
367+
NSArray *users = @[user1, [NSNull null], user2];
368+
NSArray *usersDictArr = [MJUser mj_keyValuesArrayWithObjectArray:users];
369+
MJExtensionLog(@"%@", usersDictArr);
370+
NSString *str = [usersDictArr mj_JSONObject];
371+
MJExtensionLog(@"%@", str);
372+
373+
374+
NSArray *dictArray = @[
375+
@{
376+
@"name" : @"Jack",
377+
@"icon" : @"lufy.png",
378+
},
379+
[NSNull null],
380+
@{
381+
@"name" : @"Rose",
382+
@"icon" : @"nami.png",
383+
}
384+
];
385+
386+
NSArray *userArray = [MJUser mj_objectArrayWithKeyValuesArray:dictArray];
387+
MJExtensionLog(@"%@", userArray);
388+
389+
390+
NSDictionary *dic = @{
391+
@"name": [NSNull null],
392+
@"icon": @"lufy.png"
393+
};
394+
MJUser *testNull = [MJUser mj_objectWithKeyValues:dic];
395+
MJExtensionLog(@"%@", testNull);
396+
}
397+
359398
/**
360399
* NSCoding示例
361400
*/

MJExtension/MJFoundation.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ + (BOOL)isClassFromFoundation:(Class)c
2222
dispatch_once(&onceToken, ^{
2323
// 集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断
2424
foundationClasses = [NSSet setWithObjects:
25-
[NSNull class],
2625
[NSURL class],
2726
[NSDate class],
2827
[NSValue class],

MJExtension/NSObject+MJKeyValue.m

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,11 @@ - (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys
307307
- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys
308308
{
309309
// 如果自己不是模型类, 那就返回自己
310+
// 模型类过滤掉 NSNull
311+
// 唯一一个不返回自己的
312+
if ([self isMemberOfClass:NSNull.class]) { return nil; }
313+
// 这里虽然返回了自己, 但是其实是有报错信息的.
314+
// TODO: 报错机制不好, 需要重做
310315
MJExtensionAssertError(![MJFoundation isClassFromFoundation:[self class]], (NSMutableDictionary *)self, [self class], @"不是自定义的模型类")
311316

312317
id keyValues = [NSMutableDictionary dictionary];
@@ -426,9 +431,13 @@ + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys
426431
NSMutableArray *keyValuesArray = [NSMutableArray array];
427432
for (id object in objectArray) {
428433
if (keys) {
429-
[keyValuesArray addObject:[object mj_keyValuesWithKeys:keys]];
434+
id convertedObj = [object mj_keyValuesWithKeys:keys];
435+
if (!convertedObj) { continue; }
436+
[keyValuesArray addObject:convertedObj];
430437
} else {
431-
[keyValuesArray addObject:[object mj_keyValuesWithIgnoredKeys:ignoredKeys]];
438+
id convertedObj = [object mj_keyValuesWithIgnoredKeys:ignoredKeys];
439+
if (!convertedObj) { continue; }
440+
[keyValuesArray addObject:convertedObj];
432441
}
433442
}
434443
return keyValuesArray;

0 commit comments

Comments
 (0)