我正在寻找创建一个“防崩溃”的NSDictionary,因为我正在使用一个将服务器响应转换为NSDictionary的JSON序列化程序。结果,有时字典的键不存在。目前,这会使应用程序崩溃,但是我宁愿返回一个空的NSString,所以我可以在界面中显示它。
解决方案可能是我每次访问字典时检查密钥,例如
if([returnedDictionary objectForKey:@"key"]){
// Display [returnedDictionary objectForKey:@"key"];
}else{
// Display @"";
}
然而,这很快就会导致代码膨胀,难以阅读。
我曾考虑过创建一个自定义的NSDictionary对象,例如:
@interface NSSafeDictionary : NSDictionary .....
用上面的语句覆盖objectForKey。
这是一种令人满意的方法吗?
由于
答案 0 :(得分:8)
您是否总是希望从字典中获取字符串或将其他对象存储在其中?如果它只是字符串,我认为最简单的方法是在NSDictionary上构造一个category。
@interface NSDictionary ( EmptyStrings )
- (NSString *)stringForKey:(id)aKey;
@end
@implementation NSDictionary ( EmptyStrings )
- (NSString *)stringForKey:(id)aKey {
id object = [self objectForKey:aKey];
if (object == nil ) {
return @"";
}
if ([object isKindOfClass:[NSString class]) {
return object;
} else {
return nil;
}
}
@end
答案 1 :(得分:0)
鉴于它是通过网络进行的,我认为你想要清理数据而不仅仅是检查空值,但如果没有,你真的不需要继承NSDictionary
。 / p>
你班上的一个简单的实用工具方法就可以了。
或者您可以在NSDictionary上创建一个类别:
@interface NSDictionary (Safe)
-(NSString*)safeStringForKey:(NSString*)key;
@end
(我相信你可以弄清楚实施情况。)