防崩溃的NSDictionary

时间:2010-02-23 12:45:43

标签: iphone nsdictionary

我正在寻找创建一个“防崩溃”的NSDictionary,因为我正在使用一个将服务器响应转换为NSDictionary的JSON序列化程序。结果,有时字典的键不存在。目前,这会使应用程序崩溃,但是我宁愿返回一个空的NSString,所以我可以在界面中显示它。

解决方案可能是我每次访问字典时检查密钥,例如

if([returnedDictionary objectForKey:@"key"]){

   // Display [returnedDictionary objectForKey:@"key"];
}else{

   // Display @"";
}

然而,这很快就会导致代码膨胀,难以阅读。

我曾考虑过创建一个自定义的NSDictionary对象,例如:

@interface NSSafeDictionary : NSDictionary .....

用上面的语句覆盖objectForKey。

这是一种令人满意的方法吗?

由于

2 个答案:

答案 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

(我相信你可以弄清楚实施情况。)