【问题标题】:UITableView show row number from 0UITableView 从 0 开始显示行号
【发布时间】:2014-08-19 19:47:25
【问题描述】:

我在为真机编译项目时遇到此错误。

format 指定类型为“long”,但参数的类型为“int”

在模拟器上一切正常。

如果将“%d”替换为“%ld”,我会得到:

format 指定类型为“int”,但参数的类型为“long”

在这段代码中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    if (cell) {
        cell.textLabel.text = [NSString stringWithFormat:@"page %d", indexPath.row+1]; // <-
    }
    return cell;
}

我该如何解决?

【问题讨论】:

    标签: ios objective-c tableview


    【解决方案1】:

    indexPath.row 是一个 NSInteger。这将是 32 位编译的 32 位或 64 位编译的 64 位。当我在 Xcode 中收到此错误时,消息说在格式字符串中使用 %ld 并将值转换为 long。

    cell.textLabel.text = [NSString stringWithFormat:@"page %ld", (long)(indexPath.row+1]);
    

    这解决了 32 位和 64 位版本的问题。不要强制转换为 int,因为在 64 位构建中,这会将 64 位值缩小到 32 位。

    如果使用 NSUInteger,则使用 %lu 作为格式并转换为 unsigned long。

    This question 有一些其他选择。

    【讨论】:

      【解决方案2】:

      用这个替换这一行

              cell.textLabel.text = [NSString stringWithFormat:@"page %d",(int) indexPath.row+1]; // <-
      

      【讨论】:

        猜你喜欢
        • 2012-03-23
        • 2018-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多