2011-03-01 40 views
21

如何将NSUInteger转换为NSString?我试过了,但我的NSString一直返回0。如何将NSUInteger转换为NSString?

NSUInteger NamesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count]; 
NSLog(@"--- %d", NamesCategoriesNSArrayCount); 
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 
NSLog(@"=== %d", NamesCategoriesNSArrayCountString); 

回答

7

我希望你NamesCategoriesNSArrayCountStringNSString; 如果是使用下面的代码行。 istead的

[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 
+0

从Xcode 4.5开始,它会抛出一个“格式字符串未使用的数据参数”警告。有谁知道正确的格式? – GeneralMike 2012-10-01 19:09:00

+0

最后无视。我有一个我没有注意到的最长时间的错字,而错字是导致错误的原因。 '[NSString stringWithFormat:@“%d”,myNSUInteger]'仍然是正确的方法。 – GeneralMike 2012-10-02 16:48:27

+1

@ andreas-ley的答案更准确。 ''%d''是* signed *整数的格式字符串。 NSUInteger是* unsigned long *整数。一旦超过了无符号和有符号范围的重叠,就需要使用'%lu'',否则当实际数字为正时,将打印一个负值。 – Ben 2014-01-17 22:18:21

32

当与支持编译为arm64

NamesCategoriesNSArrayCountString = [NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 

,这不会产生警告:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger]; 
+7

或'%zd'代替'NSUInteger',没有类型转换。 – 2014-03-23 20:48:17

+1

@PaulPeelen你的意思是说'NSInteger'? – 2014-03-23 22:04:33

+1

我的坏..我的意思,当然,'%tu'(因为它没有签名)。 – 2014-03-23 22:46:05

4

当编译为arm64,使用以下方法来避免警告:

[NSString stringWithFormat:@"%tu", myNSUInteger]; 

或者,你的情况:

NSUInteger namesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count]; 
NSLog(@"--- %tu", namesCategoriesNSArrayCount); 
[namesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%tu", namesCategoriesNSArrayCount]]; 
NSLog(@"=== %@", namesCategoriesNSArrayCountString); 

(而且,尖端:变量以小写。信息:here

+1

请注意,虽然'tu'现在工作,它不能保证。看到这里:http://stackoverflow.com/questions/18893880/alternatives-to-type-casting-when-formatting-nsuinteger-on-32-and-64-bit-archi – 2014-03-24 12:29:27

+0

非常真实。我其实并不知道。很好记住未来。 – 2014-03-24 13:41:01

5

您还可以使用:

NSString *rowString = [NSString stringWithFormat: @"%@", @(row)]; 

,其中行是一个NSUInteger。

0

从苹果这String Format Specifiers文章是具体,当你需要格式化苹果类型:

OS X使用多种数据类型,NSInteger的,NSUInteger,CGFloat的,并CFIndex,以提供一个代表值一致的方法32位和64位环境。在32位环境中,NSInteger和NSUInteger分别定义为int和unsigned int。在64位环境中,NSInteger和NSUInteger分别定义为long和unsigned long。为了避免需要根据平台使用不同的printf样式类型说明符,可以使用表3中显示的说明符。请注意,在某些情况下,您可能需要施加该值。

  • [NSString stringWithFormat:@"%ld", (long)value]:NSInteger的显示为十进制
  • [NSString stringWithFormat:@"%lx", (long)value]:NSInteger的显示为十六进制
  • [NSString stringWithFormat:@"%lu", (unsigned long)value]:NSUInteger显示为十进制
  • [NSString stringWithFormat:@"%lx", (unsigned long)value]:NSUInteger显示为十六进制
  • [NSString stringWithFormat:@"%f", value]:CGFloat的
  • [NSString stringWithFormat:@"%ld", (long)value]:CFIndex显示为d ecimal
  • [NSString stringWithFormat:@"%lx", (long)value]:CFIndex显示为十六进制

看到这篇文章的更多细节。