如何检查NSDictionary的键值对而不会使其崩溃?

时间:2015-04-19 22:34:57

标签: ios objective-c

我目前正在做这样的事情

NSDictionary *imageDataDictionary = nil;
imageDataDictionary = (NSDictionary *)metadataItem.value;
if(imageDataDictionary != nil)
{
    if ([imageDataDictionary objectForKey:@"data"] != nil) <---Crashes
    {
    }
}

该应用程序崩溃

if ([imageDataDictionary objectForKey:@"data"] != nil)

因为它有0个键值对。 我想知道检查NSDictionary是否有效以及是否有任何键值对的正确方法

这是消息

2015-04-19 15:56:37.255 MBlast[61278:2115186] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x7c16a7e0'

1 个答案:

答案 0 :(得分:2)

您正在向NSDictionary投射未指定类型的对象。告诉编译器“相信我,这是一本字典。”

如果对象不是字典,你就会崩溃。这几乎肯定是在这里发生的事情。添加一些错误检查:

if (![mediadataItem.value isKindOfClass: [NSDictionary class]])
  return; //The object isn't a dictionary. Bail.
NSDictionary *imageDataDictionary;
imageDataDictionary = (NSDictionary *)metadataItem.value;
if(imageDataDictionary != nil)
{
    if ([imageDataDictionary objectForKey:@"data"] != nil) <---Crashes
    {
    }
}