每对的第二个对象必须为非零。或者,您是否忘记了终止参数列表?添加行数时

时间:2018-09-28 11:11:00

标签: objective-c nsdictionary

我要例外:

  

'NSInvalidArgumentException',原因:'+ [NSDictionary dictionaryWithObjectsAndKeys:]:每对中的第二个对象必须为非零。或者,您是否忘记了将参数列表终止为零?'

在此代码中:

img

我已经尝试了Second object of each pair must be non-nilSecond object of each pair must be non-nil中的修复程序以及几个示例。但是这些都没有帮助

3 个答案:

答案 0 :(得分:0)

我发现有时可以帮助重新格式化代码以提高可读性...

如果您更改此行:

NSDictionary *answer6Row1Cell1TextDic = [NSDictionary dictionaryWithObjectsAndKeys:@"810-L50-%d",rowCount,@"DataId",[ans6Dic objectForKey:@"Cell1Text"],@"Value", nil];

收件人:

NSDictionary *answer6Row1Cell1TextDic =
[NSDictionary dictionaryWithObjectsAndKeys:
 @"810-L50-%d", rowCount,
 @"DataId", [ans6Dic objectForKey:@"Cell1Text"],
 @"Value", nil
 ];

您将看到您为对象nil有一个"Value"键。我很确定,这不是您的意图。

注意:我想您还需要反转对象和键...

答案 1 :(得分:0)

此异常是由于带有格式说明符的字符串引起的。您应将两个 @“ 810-L50-%d”,rowCount 值都包含在一个字符串中。否则,它以 @“ 810-L50-%d” 作为键 rowCount 的对象值。

因此,键和值应更改为

.separation(function(a, b) { return (a.parent == b.parent ? 1 : 5) / a.depth; });

答案 2 :(得分:0)

您似乎试图从格式@810-L50-%d和值rowCount生成字符串,而没有实际调用字符串格式化方法来做到这一点。因此,您的值和键列表不同步,并且编译器报告与nil有关的错误。

切换到现代语法并进行更正可以得到:

NSDictionary *answer6Row1Cell1TextDic =
   @{ @"DataId" : [NSString stringWithFormat:@"810-L50-%d",rowCount],
      @"Value" : ans6Dic[@"Cell1Text"]
    };

@{ ... }语法是字典文字,包含零个或多个<key> : <value>对。 ans6Dic[@"Cell1Text"]字典索引,它查找与键匹配的值。

HTH