为什么标签永远不会将以前的值替换为新值?

时间:2015-08-05 13:38:37

标签: objective-c uitableview uilabel

标签在我的tableview中:

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];
}

增加值并将其存储到数组中。给予label.i的数组值提到了问题作为图像。

在此处输入图片说明[i get output like this after i increment ]

1

1 个答案:

答案 0 :(得分:0)

我重构了一下你的代码,似乎有效:

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. 这是转向现代物品的最佳时间。写 label1.text=[arr_count[indexPath.row];arr_count[click.tag]
  2. 您的代码不安全。您的应用可能会因索引缺失而崩溃。在获得tagvalue之前(顺便说一句,你应该根据obj-c样式将它命名为tagValue),你应该检查数组是否包含这么多的对象
  3. 正确命名以提高代码的可读性:
    • arr_count是一个坏名字,第一个在objc我们不在名称中使用_,第二个我们不使用快捷方式,第三个它建议它是一个计数器,而不是数组< / LI>
    • tagvalue也不好,字0后的每个字都应该有大写字母,所以它应该是tagValue
  4. 最后,在数组中使用数字值保留NSNumber而不是NSString是不是更好?更多格式,但它更正确!
  5. 现在让我们修复一下真正的错误:不仅你必须在数组中交换值,而且必须在交换数组中的值后更新标签的值 - 这就是它无法正常工作的原因。 label.text从数组中复制值,如果更新数组则不会更新。您需要根据阵列手动更新标签。

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

    label1.text = arr_count[click.tag];
    

    但是我强烈建议您将代码重构为上述要点,以使您的代码更好并提高您的开发人员技能:)