为什么标签从不将以前的值替换为新值?

why the label never replace the previous value to new value?

标签在我的表格视图中:

UILabel *label1;
    label1=[[UILabel alloc]initWithFrame:CGRectMake(500,75, 50, 50)];
    label1.text=[arr_count objectAtIndex:indexPath.row];
    [label1 setTranslatesAutoresizingMaskIntoConstraints:NO];
    label1.tag=100;
    [cell addSubview:label1];

此处使用按钮操作增加

       - int tagValue=[[arrCount objectAtIndex:click.tag] intValue];
    if(tagValue <=5)
        {

        tagValue++;
            NSNumber *num=[NSNumber numberWithInt:click.tag];
            [arrCount replaceObjectAtIndex:click.tag withObject:num];
           NSLog(@"increment %@",arrCount);
        }
     NSIndexPath *ind=[NSIndexPath indexPathWithIndex:click.tag];
    label2.text = arrCount[click.tag];
    [self.mTableView.tableView reloadInputViews];
}

增加值,我将它存储到一个 array.the 数组值给 label.i 我提到这个问题作为图像。

在此处输入图片描述 []

1

我对你的代码进行了一些重构,它似乎可以工作:

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:@[@0, @1, @2, @3, @4, @5, @6, @7, @8, @9]];
NSLog(@"original %@", array);
for (int i = 0; i < array.count; i++) {
    int value = [array[i] intValue];
    value += 1;

    [array replaceObjectAtIndex:i withObject:@(value)];
    NSLog(@"incremented %@", array);
}

输出:

original (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
incremented (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

还有一些注意事项:

  1. 这是切换到现代 obj-c 的最佳时机。写 label1.text=[arr_count[indexPath.row];arr_count[click.tag]
  2. 您的代码不安全。您的应用程序可能会因为索引不足而崩溃。在获取 tagvalue 之前(顺便说一句,你应该根据 obj-c 风格称它为 tagValue)你应该检查数组是否包含这么多对象
  3. 正确命名以提高代码的可读性:
    • arr_count 是一个坏名字,第一在 objc 中我们不在名称中使用 _,第二我们不使用快捷方式,第三它建议它是一个计数器 - 数字,而不是数组
    • tagvalue也不好,0字后的每个字都要大写,所以应该是tagValue.
  4. 最后,在数组中保留 NSNumber 而不是 NSString 和数字值不是更好吗?更多格式,但更正确!

所以现在让我们修复真正的错误:不仅您必须交换数组中的值,而且您必须在交换数组中的值后更新标签的值 - 这就是它不起作用的原因。 label.text 从数组中复制值,如果您更新数组则不会更新。您需要根据您的数组手动更新标签。

所以在你的代码之后你应该写:

label1.text = arr_count[click.tag];

不过,我强烈建议您按照上述几点重构您的代码,以使您的代码更好并提高您的开发人员技能:)