我的视图控制器上有一组复选框,它们运行良好。长话短说:用户选中一个框,然后点击保存按钮。检查框后保存会将值“yes”发布到我的数据库中的字段。但是,如果没有选中框,并且我的用户点击“保存”,我就会抛出此错误:
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'*** - [NSDictionary initWithObjects:forKeys:]:对象的数量(0)与count的数量不同 键(1)'
如果没有选中复选框,如何阻止应用崩溃,因为选中复选框不是强制性的?下面的代码(如果您需要更多信息,请告诉我 - 删除按钮操作中错综复杂的'保存'部分)。
viewcontroller.m
- (IBAction)myCheck:(id)sender {
if (!checked17) {
[myCheck setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
checked17 = YES;
self.box = @"Yes";
}
else if (checked17) {
[myCheck setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
checked17 = NO;
self.box = @"No";
}
}
- (IBAction)submitButton:(id)sender {
NSDictionary *petOption = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.box, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];
NSDictionary *checkedFinish = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:petOption] forKey:@"und"];
[nodeData setObject:checkedFinish forKey:@"field_haveapet"];
}
答案 0 :(得分:1)
dictionaryWithObjects
计算数组大小,直到第一个nil
出现。
所以当self.box
为nil
时,第一个参数在这里被视为空数组:
[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.box, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]
您需要以不同方式处理这种情况,例如,NSDictionary
为self.box
时显式创建空nil
。