【发布时间】:2013-04-25 03:21:31
【问题描述】:
我经常发现需要将NSJSONSerialization 创建的数据结构缓存到磁盘,如果有空值,-writeToFile 会失败,我需要一个在结构未知时有效的修复程序。
这行得通,并且允许直接变异,因为 NSMutableDictionary 本身的实例没有被枚举,但感觉有点 hacky。
这完全没问题,还是绝对有必要重新创建一棵新树并返回它?
- (void) removeNullsFromJSONTree:(id) branch
{
if ([branch isKindOfClass:[NSMutableArray class]])
{
//Keep drilling to find the leaf dictionaries
for (id childBranch in branch)
{
[self removeNullsFromJSONTree:childBranch];
}
}
else if ([branch isKindOfClass:[NSMutableDictionary class]])
{
const id nul = [NSNull null];
const NSString *empty = @"";
for(NSString *key in [branch allKeys])
{
const id object = [branch objectForKey:key];
if(object == nul)
{
[branch setObject:empty forKey:key];
}
}
}
}
【问题讨论】:
-
if([object isKindOfClass:[NSNull null]]) 试试这样
-
是的,它最初是使用
isKindOfClass进行测试的,但正如关于删除空值(我似乎找不到)的类似 SO 问题中所述,比较指向常量的指针更有效。 -
我创建了一个可以做到这一点的类别。你可以在这里找到它github.com/bismasaeed00/NullReplacer
标签: objective-c recursion nsdictionary nsnull