【问题标题】:Count of objects differs from count of keys if box is unchecked?如果未选中框,则对象数与键数不同?
【发布时间】:2016-09-16 00:37:11
【问题描述】:

我的视图控制器上有一组复选框,它们工作得很好。长话短说:用户选中一个框,然后点击保存按钮。选中一个框后保存会将值“是”发布到我的数据库中的一个字段。但是,如果没有选中任何框,并且我的用户点击“保存”,我会抛出此错误:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'*** -[NSDictionary initWithObjects:forKeys:]:对象计数 (0) 与计数不同 钥匙 (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"];

}

【问题讨论】:

  • 您是否启用了异常断点?这显示了如何做到这一点:stackoverflow.com/questions/17802662/…。启用此断点后使您的应用程序崩溃,它应该会向您显示崩溃的确切行。
  • @Losiowaty 这是崩溃行:NSDictionary *petOption = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.checkBox, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];

标签: ios objective-c


【解决方案1】:

dictionaryWithObjects 计算数组大小,直到出现第一个 nil

所以当self.boxnil 时,第一个参数在这里被视为空数组:

[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.box, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]

您需要以不同的方式处理这种情况,例如,当 self.boxnil 时,显式创建空的 NSDictionary

【讨论】:

  • 最简单的方法是用正确的初始值初始化viewDidLoad中的self.box
  • 我最终通过在崩溃行之前删除以下行来“修复”它: if (self.box == (id)[NSNull null] || self.spayed.length == 0 ) self.box = @"N/A";
猜你喜欢
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2023-03-15
  • 2022-06-10
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多