1

我收到一个NSDictionaryusing AFNetworking。那本字典有很多值。

我认为其中一个是INTor NSNumber,不知道什么是自动转换。预期的数字是 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"]);
4

3 回答 3

4

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

NSNumber但是,当您想将 分配给您的文本字段时,这无济于事。您需要将数字转换为NSString. 理想情况下,您应该使用 anNSNumberFormatter将 转换NSNumberNSString.

做这个:

NSNumber *likesNumber = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"];
NSString *numberText = [NSString stringWithFormat:@"%d". [likesNumber intValue]];
NSLog(@"Number: %@", numberText);
cell.numberOfLikes.text = numberText;
于 2013-06-04T20:26:35.347 回答
1

几点。

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

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

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

有关各种格式说明符的一些(血腥)详细信息,请参见此处

于 2013-06-04T20:58:16.013 回答
0

提示:%i是 . 的转换说明符int

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

现在回去阅读 的文档NSArray,想一想它是否可以包含ints,然后继续阅读。


所以字典中的对象是NSNumber->它们是Objective-C对象->它们是使用指针实现的实例。PoorNSLog()尝试将指针值转换为整数。要么用于%@获取数字的描述,要么%i用于[theNumber intValue]打印其整数值。

于 2013-06-04T20:25:57.010 回答