Как преобразовать NSUInteger в NSString?

Как преобразовать NSUInteger в NSString? Я пытался, но мой NSString все время возвращал 0.

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

person user563496    schedule 01.03.2011    source источник


Ответы (5)


При компиляции с поддержкой arm64 это не будет генерировать предупреждение:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
person Andreas Ley    schedule 06.12.2013
comment
или %zd вместо NSUInteger, то есть без приведения типов. - person Paul Peelen; 24.03.2014
comment
@PaulPeelen Вы хотели сказать NSInteger? - person Andreas Ley; 24.03.2014
comment
Мой плохой.. Я имел в виду, конечно, %tu (поскольку он не подписан). - person Paul Peelen; 24.03.2014

Я надеюсь, что ваш NamesCategoriesNSArrayCountString это NSString; если да, используйте приведенную ниже строку кода.

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

вместо

[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];
person Raj    schedule 03.03.2011
comment
Начиная с Xcode 4.5, это вызовет предупреждение о аргументе данных, не используемом строкой формата. Кто-нибудь знает правильный формат? - person GeneralMike; 01.10.2012
comment
Не обращайте внимания на последнее. У меня была опечатка, которую я не замечал долгое время, и именно опечатка была причиной ошибки. [NSString stringWithFormat:@"%d", myNSUInteger] по-прежнему правильный способ сделать это. - person GeneralMike; 02.10.2012
comment
Ответ @andreas-ley более точен. %d – это строка формата для целого числа со знаком. NSUInteger — это длинное целое число без знака. Использование %lu необходимо после превышения перекрытия между беззнаковым и знаковым диапазоном, иначе будет напечатано отрицательное значение, когда на самом деле число положительное. - person Ben; 18.01.2014

При компиляции для arm64 используйте следующее, чтобы избежать предупреждений:

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

Или, в вашем случае:

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

(Кроме того, совет: переменные начинаются с нижнего регистра. Информация: здесь)

person Paul Peelen    schedule 23.03.2014
comment
Обратите внимание, что хотя tu работает прямо сейчас, это не гарантируется. См. здесь: stackoverflow.com/questions/18893880/ - person Andreas Ley; 24.03.2014
comment
Очень верно. Я этого не знал на самом деле. Хорошо иметь в виду на будущее. - person Paul Peelen; 24.03.2014

Вы также можете использовать:

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

где строка представляет собой NSInteger.

person Reefwing    schedule 11.12.2015

Это Спецификаторы формата строк от Apple предназначена для случаев, когда вам нужно отформатировать типы Apple:

OS X использует несколько типов данных — NSInteger, NSUInteger, CGFloat и CFIndex — для обеспечения согласованных средств представления значений в 32- и 64-разрядных средах. В 32-разрядной среде NSInteger и NSUInteger определяются как int и unsigned int соответственно. В 64-разрядных средах NSInteger и NSInteger определяются как 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 отображается как десятичный
  • [NSString stringWithFormat:@"%lx", (long)value] : CFIndex отображается как шестнадцатеричный

См. статью для более подробной информации.

person Nate    schedule 01.11.2016