访问NSDictionary将检索对象而不是NSString

时间:2013-07-11 20:27:38

标签: ios objective-c json

我有一个我用JSON填充的NSDictionary。这一切看起来都很棒,并且部分为我工作。我正在设置我的类的属性NSString类型的属性等于某个键的值,奇怪的是,我的属性设置等于一个对象是对象是我需要的字符串值。

字典(印刷说明):

miscInfo:
<__NSArrayI 0x7494ab0>(
{
  Abbreviation = DR;
  DateInactive = "";
  Description = Drowsiness;
  ForQueue = 2430;
  IsAdditive = 0;
  IsReserved = 1;
  MiscCodeTypeStr = AVR;
  PluralDescription = "";
  ReservedDescription = Drowsiness;
}

我在我的财产上设置它是这样的:

self.ReactionName = [miscInfo valueForKeyPath:@"Description"];

产生:

enter image description here

我已经尝试将其转换为NSString,例如:

self.ReactionName = (NSString*)[allergenAdverseReaction valueForKeyPath:@"Description"];

但没有给出。我做错了什么?

2 个答案:

答案 0 :(得分:6)

miscInfo是一个包含字典的数组,所以

self.ReactionName = [[miscInfo objectAtIndex:0] objectForKey:@"Description"];

会给出您期望的结果。或者,使用现代数组和字典 下标语法:

self.ReactionName = miscInfo[0][@"Description"];

备注:在您的代码中

self.ReactionName = [miscInfo valueForKeyPath:@"Description"];

valueForKeyPath应用于数组的每个元素,数组应用于所有元素 返回值。这就是您在Xcode调试器窗口中看到的内容。

这个“功能”非常有用,但总的来说(正如上面评论的Hot Licks) objectForKey是从字典中获取值的正确方法。和

self.ReactionName = [miscInfo objectForKey:@"Description"];
如果miscInfo不是预期的字典,则

会引发描述性运行时异常。

答案 1 :(得分:1)

在我看来,miscInfo是一个字典数组。在这种情况下,valueForKey将返回一个数组。看看下面的代码是否有效。如果是,那么它就是一个字典数组。

self.ReactionName = [[allergenAdverseReaction valueForKeyPath:@"Description"]lastObject];