__NSCFString objectForKeyedSubscript:异常

时间:2013-05-24 19:22:43

标签: ios objective-c json nsdictionary

我从服务器获取数据。我的应用程序在Sinulator和测试设备iPhone 4s中工作正常,但是一个人在iPod 4上有问题。他得到例外:

-[__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x1d263a20

我无法使用此设备,因此我编写代码以了解崩溃的位置。

 if (![dictionaryRest[@"compliments"] isEqual:[NSNull null]]) {
       NSMutableArray *array = [NSMutableArray new];
       NSMutableArray *firstArray = [NSMutableArray new];
       for (NSDictionary *dic in dictionaryRest[@"compliments"]) {
            Compliment *compl = [Compliment new];
            if (![dic[@"ID_promotions"] isEqual:[NSNull null]])
                compl.ID = [dic[@"ID_promotions"] integerValue];

所以在最后2个字符串中这个例外是。这是什么原因?所以我明白我需要使用

if ([dict objectForKey:[@"compliments"])

代替

if (![dict[@"compliments"] isEqual:[NSNull null]])

以及所有其他情况。

我现在测试,我的字典中有ID: enter image description here

2 个答案:

答案 0 :(得分:13)

您的词典中有一个NSString实例,您希望有一个词典。

请注意,“使用此而不是”与问题无关。

答案 1 :(得分:0)

-objectForKeyedSubscript:是NSDictionary对象的实例方法。 __NSCFString objectForKeyedSubscript:exception表示方法-objectForKeyedSubscript以某种方式在某个NSString对象上被调用。 所以基本上你只需要正确检查对象的类,然后才能安全地假设它实际上是字典。

if([dic isKindOfClass:[NSDictionary class]]) 
{
    id obj = dic[@"key"];
}