美文网首页
Attempt to insert non-property l

Attempt to insert non-property l

作者: 小冰山口 | 来源:发表于2024-01-25 10:18 被阅读0次

项目里遇到一个问题, 后台返回的数据直接作为字典存入NSUserDefaults, 但是返回的数据里, 有NSNull这个对象, NSNull并不是nil, 所以它存在于NSDictionaryNSArray中是合法的. 但是如果将它存入NSUserDefaults中, 就会崩溃, 原因就是Attempt to insert non-property list object

所以, 我写了个分类. 这个分类是NSObject的分类, 可以将里面包含的所有的NSNullvalue值都转换为@"", 如下:

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

相关文章

网友评论

      本文标题:Attempt to insert non-property l

      本文链接:https://www.haomeiwen.com/subject/cmfvodtx.html