Objective c NSInvalidArgumentException[NSDictionary initWithObjects:forKeys:]:对象计数(0)与键计数(1)不同

Objective c NSInvalidArgumentException[NSDictionary initWithObjects:forKeys:]:对象计数(0)与键计数(1)不同,objective-c,nsdictionary,Objective C,Nsdictionary,获取错误NSInvalidArgumentException[NSDictionary initWithObjects:forKeys:]:对象计数(0)不同于键计数(1)。我使用以下代码 NSString *errorDesc = nil; SBJsonParser *parser = [[SBJsonParser alloc] init]; NSDictionary *jsonDictionary = [parser objectWithString:responseData]; pat

获取错误
NSInvalidArgumentException[NSDictionary initWithObjects:forKeys:]:对象计数(0)不同于键计数(1)
。我使用以下代码

NSString *errorDesc = nil;
SBJsonParser *parser =  [[SBJsonParser alloc] init];
NSDictionary *jsonDictionary = [parser objectWithString:responseData];

paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
documentsPath = [paths objectAtIndex:0];
plistPath = [documentsPath stringByAppendingPathComponent:@"json_keys.plist"];

NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects:jsonDictionary, nil] forKeys:[NSArray arrayWithObjects: @"json_keys",  nil]];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc];
if (plistData)
{
    [plistData writeToFile:plistPath atomically:YES];
}
else
{
    NSLog(@"Error in saveData: %@", errorDesc);
    [errorDesc release];
}

从错误消息判断,在本例中,
[parser objectWithString:responseData]
返回
nil
。因此,
[NSArray array with objects:jsonDictionary,nil]
创建空数组。之后,您将尝试创建
NSDictionary
,将空数组作为值传递,将带有
@“json_键”的数组作为键传递。所以,在这种情况下,错误消息非常准确

这种情况的解决取决于您试图实现的目标

jsonDictionary
nil
时,您可以简单地从方法返回,不做任何事情:

// ...
NSDictionary *jsonDictionary = [parser objectWithString:responseData];
if (nil == jsonDictionary) {
    return;
}
paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
// ...
另一种可能是在这种情况下存储空的
plistDict

NSMutableDictionary *plistDict = [NSMutableDictionary dictionaryWithCapacity:1];
if (nil != jsonDictionary) {
    [plistDict setObject:jsonDictionary forKey:@"json_keys"];
}

当然,您还可以找出
[parser objectWithString:responseData]
返回
nil
的原因,并解决这个问题。

是否
[parser objectWithString:responseData]
返回NSDictionary?如果没有,那么就投吧。