项目里遇到一个问题, 后台返回的数据直接作为字典存入NSUserDefaults
, 但是返回的数据里, 有NSNull
这个对象, NSNull
并不是nil
, 所以它存在于NSDictionary
和NSArray
中是合法的. 但是如果将它存入NSUserDefaults
中, 就会崩溃, 原因就是Attempt to insert non-property list object
所以, 我写了个分类. 这个分类是NSObject
的分类, 可以将里面包含的所有的NSNull
的value
值都转换为@""
, 如下:
NSObject+SFExtension.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSObject (SFExtension)
- (id)replaceNull;
@end
NS_ASSUME_NONNULL_END
NSObject+SFExtension.m
#import "NSObject+SFExtension.h"
@implementation NSObject (SFExtension)
- (id)replaceNull {
return self;
}
@end
@implementation NSDictionary (SFExtension)
- (NSDictionary *)replaceNull {
NSMutableDictionary *newDict = [NSMutableDictionary dictionaryWithDictionary:self];
for (NSString *key in [self allKeys]) {
id value = [self objectForKey:key];
[newDict setObject:[value replaceNull] forKey:key];
}
return newDict.copy;
}
@end
@implementation NSArray (SFExtension)
- (NSArray *)replaceNull {
NSMutableArray *newArray = [NSMutableArray arrayWithArray:self];
for (int i = 0; i < newArray.count; i ++) {
id value = [newArray objectAtIndex:i];
[newArray replaceObjectAtIndex:i withObject:[value replaceNull]];
}
return newArray.copy;
}
@end
@implementation NSNull (SFExtension)
- (NSString *)replaceNull {
return @"";
}
@end
网友评论