调用allKeys时无法识别的选择器

时间:2014-03-30 05:40:00

标签: ios objective-c

我在另一个字典中的许多JSON字典上调用以下代码(在这种情况下,NSDictionary对象与另一个NSDictionary对象。

-(NSString *)getAllDictionaryValues:(NSDictionary *)dict
{
    NSString *output=[NSString stringWithFormat:@""];
    for(NSString *key in [dict allKeys])
    {
        output = [NSString stringWithFormat:@"%@\n%@: %@",output, key, [dict objectForKey:key]];
    }
    return output;
}

然而,当我运行此代码时,我得到了

2014-03-30 01:27:35.565 WebServiceTest[48606:60b] -[__NSCFString allKeys]: unrecognized selector sent to instance 0x9270230

我对allKeys的电话有什么问题?

4 个答案:

答案 0 :(得分:1)

可能是您在调用方法

中输入字符串而不是字典对象

答案 1 :(得分:1)

那很明显。如日志所述,您尝试在allKeys实例上调用__NSCFString方法。这意味着您已将NSString而非NSDictionary发送至getAllDictionaryValues:方法。

答案 2 :(得分:1)

就像当你向这个函数发送消息时,可能会声明你的代码dictNSDicationay对象(当你调用这个函数时),但它不是字典可能是一个字符串数组或者等等你为什么得到例外。

-(NSString *)getAllDictionaryValues:(NSDictionary *)dict

首先检查您的dict喜欢

if([dict isKindOfClass:[NSArray class]]){
    //is an array
}else if([dict isKindOfClass:[NSDictionary class]]){
    //is an dictionary
}else if([dict isKindOfClass:[NSString class]]){
//is an string
}else{
    //or its something else
}

答案 3 :(得分:1)

这意味着dict对象是NSString类型。您可以像这样检查对象:

if([dict isKindOfClass:[NSDictionary class]]) {
// dict is NSDictionary type of object
} else if([dict isKindOfClass:[NSString class]]) {
// dict is string type of object.
}