Jas*_*ldo 0 json objective-c ios
我有一个我用JSON填充的NSDictionary.这一切看起来都很棒,而且它对我来说部分有用.我正在设置我的类的属性NSString类型的属性等于某个键的值,这奇怪地设置我的属性等于一个对象是对象是我需要的字符串值.
字典(印刷说明):
miscInfo:
<__NSArrayI 0x7494ab0>(
{
Abbreviation = DR;
DateInactive = "";
Description = Drowsiness;
ForQueue = 2430;
IsAdditive = 0;
IsReserved = 1;
MiscCodeTypeStr = AVR;
PluralDescription = "";
ReservedDescription = Drowsiness;
}
Run Code Online (Sandbox Code Playgroud)
我在我的财产上设置它是这样的:
self.ReactionName = [miscInfo valueForKeyPath:@"Description"];
Run Code Online (Sandbox Code Playgroud)
哪个产生:

我已经尝试将其转换为NSString,例如:
self.ReactionName = (NSString*)[allergenAdverseReaction valueForKeyPath:@"Description"];
Run Code Online (Sandbox Code Playgroud)
但没有给出.我究竟做错了什么?
miscInfo是一个包含字典的数组,所以
self.ReactionName = [[miscInfo objectAtIndex:0] objectForKey:@"Description"];
Run Code Online (Sandbox Code Playgroud)
会得到你期望的结果.或者,使用现代数组和字典下标语法:
self.ReactionName = miscInfo[0][@"Description"];
Run Code Online (Sandbox Code Playgroud)
备注:在您的代码中
self.ReactionName = [miscInfo valueForKeyPath:@"Description"];
Run Code Online (Sandbox Code Playgroud)
valueForKeyPath应用于数组的每个元素,并返回包含所有值的数组.这就是您在Xcode调试器窗口中看到的内容.
这个"功能"非常有用,但一般来说(如上面评论的Hot Licks)
objectForKey是从字典中获取值的正确方法.和
self.ReactionName = [miscInfo objectForKey:@"Description"];
Run Code Online (Sandbox Code Playgroud)
如果miscInfo不是预期的字典,则抛出描述性运行时异常.