__NSCFDictionary不响应任何选择器

时间:2016-02-10 21:33:03

标签: ios objective-c json

我正在尝试解析看起来像这样的JSON:

food =     {
    "food_id" = 4823;
    servings =         {
        serving =             (
                            {
                calcium = 9;
                calories = 221;
                carbohydrate = "16.20";
                cholesterol = 31;

我可以在[food][servings][serving]级别成功检索数组,我通过日志语句确认具有相应的类__NSCFArray,但是在迭代该数组并尝试执行时遇到问题用包含的信息做有用的事情:

  for (id foodId in resultsPerServing) {
        NSLog(@"hree is a result %@", foodId);
        foodObjectClass *foodObject = [foodObjectClass new];
        NSDictionary *foodIdDictionary = (NSDictionary *)foodId;
        if ([foodIdDictionary respondsToSelector:@selector(allKeys)]) {
            [foodObject getDetailsFromResponseObject:foodIdDictionary];
        } else {
            unsigned int mc = 0;
            Method * mlist = class_copyMethodList(object_getClass(foodIdDictionary), &mc);
            NSLog(@"%d methods", mc);
            for(int i=0;i<mc;i++)
                NSLog(@"Method no #%d: %s", i, sel_getName(method_getName(mlist[i])));

            [NSException raise:@"DIDN'T GET A DICTIONARY" format:@"here is the object %@ which has class %@", resultsPerServing, [responseObject class]];
        }

}

这会导致NSException被提升,但在NSException中,打印对象的输出看起来像字典。此外,当异常打印出不响应allKeys的对象的类时,该对象具有类__NSCFDictionary给出了什么?为什么这个字典没有allKeys方法?如何才能使用函数字典?

更令人费解的是,下面的运行时代码(从我丢失链接的SO帖子中复制)表明该字典有0个方法。 为什么这个对象没有方法?如何获得具有方法的对象?

1 个答案:

答案 0 :(得分:-1)

先检查确认它是NSDictionary吗?

 if ([foodId isKindOfClass:[NSDictionary class]]  ) {
    foodIdDictionary = (NSDictionary *)foodId;
    [foodObject getDetailsFromResponseObject:foodIdDictionary];
 }