2011-03-01 44 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顯示爲十六進制

看到這篇文章的更多細節。