Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 全局对象类别Forkey:安全_Iphone_Objective C_Json_Nsarray_Nsdictionary - Fatal编程技术网

Iphone 全局对象类别Forkey:安全

Iphone 全局对象类别Forkey:安全,iphone,objective-c,json,nsarray,nsdictionary,Iphone,Objective C,Json,Nsarray,Nsdictionary,我们在处理JSON提要时遇到了无数问题,导致[\uu NSCFString objectForKey:]错误(使用AFNetworking JSON Framework),导致应用程序崩溃 我们知道这是为什么,因为字符串占据了预期出现NSDictionary的位置 但是我在想,难道不可能为objectForKey函数创建一个类别或子类来快速检查所讨论的对象是否是字典吗?在NSArrays上安装ObjectForKey 这肯定会减少我们的项目中再次出现类似问题的风险。我认为拥有一些像 - (NSS

我们在处理JSON提要时遇到了无数问题,导致
[\uu NSCFString objectForKey:]
错误(使用AFNetworking JSON Framework),导致应用程序崩溃

我们知道这是为什么,因为字符串占据了预期出现
NSDictionary
的位置

但是我在想,难道不可能为
objectForKey
函数创建一个类别或子类来快速检查所讨论的对象是否是字典吗?在
NSArray
s上安装
ObjectForKey


这肯定会减少我们的项目中再次出现类似问题的风险。

我认为拥有一些像

- (NSString*)stringForKey:(id)key;
你可以做一些像

- (NSString*)stringForKey:(id)key
{
    id object = [self objectForKey:key];

    if ([object isKindOfClass:[NSString class]]) {
        return (NSString*)object;
    }

    return nil;
}
对于其他对象类型,也可以使用类似的

这样,您将始终收到预期的对象类型或零

编辑


事实上,在做了一些搜索之后。我认为NSDictionary已经存在这个函数了。(感谢jrturton的更正。这只存在于NSUserDefaults中。)

为什么不先使用
isKindOfClass
检查类型?我在我的“常见疑点”上这样做,但更愿意(也不太混乱)将其折叠在objectForKey:函数中。它存在于NSUserDefaults中,而不是NSDictionary。谢谢,是的,我同意。我经常遇到同样的问题,即使用objectForKey后由于类型错误而失败。