将数字显示为字符串

时间:2013-06-04 20:21:13

标签: ios objective-c cocoa-touch

我使用NSDictionary收到AFNetworking。那本词典有很多价值。

其中一个我认为是INTNSNumber,不知道什么是自动转换。预期的数字是2和3,但不知怎的,我总是得到一个很长的数字......我尝试了所有我知道但可以找到的东西,但我不能让它在

中显示正确的数字
cell.numberOfLikes.text

这些都是我尝试过但没有成功的事情。我会很感激一些指导

NSLog(@"%i",_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]);

   NSLog(@"%i",[NSNumber numberWithInt:_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]]);

    cell.numberOfDownloads.text = [NSString stringWithFormat:@"%i",_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]]; 

cell.numberOfLikes.text =_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]);

3 个答案:

答案 0 :(得分:4)

指定的%i格式适用于基本的整数数据类型。由于您拥有(或尝试创建)NSNumber对象,因此可以使用%@进行记录。 %@用于格式说明符中的Objective-C对象。

但是,如果要将NSNumber分配给文本字段,则无效。您需要将数字转换为NSString。理想情况下,您应使用NSNumberFormatterNSNumber转换为NSString

这样做:

NSNumber *likesNumber = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"];
NSString *numberText = [NSString stringWithFormat:@"%d". [likesNumber intValue]];
NSLog(@"Number: %@", numberText);
cell.numberOfLikes.text = numberText;

答案 1 :(得分:1)

有几点。

  • 首先,NSLog的第一个参数是格式说明符。它完全等同于[NSString stringWithFormat:]中使用的格式说明符,并且很少需要两者。
  • 接下来,Objective-C中的数据可以是单独的int值,char值,char*值(即C字符串),浮点值和Objective-C对象值。 (加上你很少使用的一些长的,无符号的等值。)
  • NSString是一个Objective-C对象,NSNumber也是如此。另一方面,NSInteger是特定大小int的别名,通常可与int互换。很多时候人们会对NSNumber(对象)和NSInteger(标量int)感到困惑 - 他们相同。
  • 在NSLog或stringWithFormat说明符中,使用%后跟一个或多个字符来指示如何格式化值(在以下值列表中)。 %d%iint。 (%d是首选。)%f是一个简单的浮点值(但这些值的格式可能会变得更复杂)。 %s是C风格的字符串(即char*值)。 %@用于格式化Objective-C对象。特别是,使用%@来格式化NSString或(以获取默认表示)NSNumber。

了解%@在格式字符串中的工作原理非常重要。当格式解释器遇到它时,它会将值列表中的下一个项解释为指向Objective-C对象的指针,并调用该对象的description方法。 NSString只返回description的结果,而NSNumber返回一个NSString,表示数字值的字符表示。其他对象(所有Objective-C对象支持description,如果只是默认情况下)返回对象类型的简单标识或对象内部值的表示。

因此,如果你有一个NSNumber,你可以用%@直接格式化它,或者你可以提取数值(例如[someNSNumber intValue])然后适当地格式化该值(例如{{{ 1}})。执行后者的原因是,如果要指定数字的列宽(例如,%d,将数字格式化为5位字段)。

有关各种格式说明符的一些(gory)详细信息,请参阅here

答案 2 :(得分:0)

提示:%iint的转化说明符。

  

其中一个我认为是INT或NSNumber,不知道什么是自动转换

现在回过头来阅读NSArray的文档,考虑一下它是否可以包含int,然后继续阅读。


因此字典中的对象是NSNumber - >的实例。他们是Objective-C对象 - >它们是使用指针实现的。差NSLog()尝试将指针值转换为整数。使用%@来获取数字的描述,或使用%i[theNumber intValue]来打印其整数值。