Ответ 1
При компиляции с поддержкой arm64
это не приведет к возникновению предупреждения:
[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Как преобразовать NSUInteger
в NSString
? Я пробовал, но мой NSString
возвращал 0 все время.
NSUInteger NamesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count];
NSLog(@"--- %d", NamesCategoriesNSArrayCount);
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];
NSLog(@"=== %d", NamesCategoriesNSArrayCountString);
При компиляции с поддержкой arm64
это не приведет к возникновению предупреждения:
[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Надеюсь, ваш NamesCategoriesNSArrayCountString
будет NSString
;
если да, используйте приведенную ниже строку кода.
NamesCategoriesNSArrayCountString = [NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];
istead
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];
Вы также можете использовать:
NSString *rowString = [NSString stringWithFormat: @"%@", @(row)];
где row является NSUInteger.
При компиляции для arm64
используйте следующее, чтобы избежать предупреждений:
[NSString stringWithFormat:@"%tu", myNSUInteger];
Или, в вашем случае:
NSUInteger namesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count];
NSLog(@"--- %tu", namesCategoriesNSArrayCount);
[namesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%tu", namesCategoriesNSArrayCount]];
NSLog(@"=== %@", namesCategoriesNSArrayCountString);
(Также, подсказка: Переменные начинаются с нижнего регистра. Info: здесь)
Этот String Format Specifiers статья от Apple специфична, когда вам нужно форматировать типы Apple:
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 отображается как hex[NSString stringWithFormat:@"%lu", (unsigned long)value]
: NSUInteger отображается как десятичный[NSString stringWithFormat:@"%lx", (unsigned long)value]
: NSUInteger отображается как hex[NSString stringWithFormat:@"%f", value]
: CGFloat[NSString stringWithFormat:@"%ld", (long)value]
: CFIndex отображается как десятичный[NSString stringWithFormat:@"%lx", (long)value]
: CFIndex отображается как hexПодробнее см. статью.