编译用于真实电话的项目时出现此错误。


  格式指定为“ long”类型,但参数为“ int”类型


在模拟器上一切正常。

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


  格式指定为“ 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;
}


我该如何解决?

最佳答案

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还有一些其他选择。

10-07 12:24
查看更多