编译用于真实电话的项目时出现此错误。
格式指定为“ 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还有一些其他选择。