Intereting Posts
Как удалить удаленные идентификаторы продукта IAP? Параметры нижнего регистра в URL с использованием универсальных ссылок iOS facebook не возвращает данные пользователя, быстро Неверный indexPath.row после reloadData Как добавить искажение FishEye к UIImage с помощью GPUImage или любого другого Lib? как установить свойство объекта внутри NSArray Как скомпилировать образец образца эффекта тиснения vImage? Изменение шрифта NSAttributedString при сохранении атрибутов формата Приложение не работает в фоновом режиме на iOS 10.1.1 Приложение iPad падает при загрузке файлов на устройство Начальное смещение UIScrollView Проблема при получении сообщений в автономном режиме с помощью QuickBlox Как получить уведомление в UIWebView Player для полноэкранного режима в iOS 8? NodeJS в качестве сервера обмена мгновенными сообщениями для службы чата MVP UIKeyboardAppearance lag на iOS 7

Отображение числа в виде строки

Я получаю NSDictionary используя AFNetworking . этот словарь имеет много значений.

один из них я считаю INT или 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"]); 

Указанный формат %i предназначен для базовых, целых типов данных. Поскольку у вас есть (или пытайтесь создать) объект NSNumber , вы можете использовать %@ для его регистрации. %@ используется для объектов Objective-C в спецификаторах формата.

Но это не помогает, если вы хотите присвоить NSNumber текстовому полю. Вам нужно преобразовать число в NSString . В идеале вы должны использовать NSNumberFormatter для преобразования NSNumber в NSString .

Сделай это:

 NSNumber *likesNumber = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]; NSString *numberText = [NSString stringWithFormat:@"%d". [likesNumber intValue]]; NSLog(@"Number: %@", numberText); cell.numberOfLikes.text = numberText; 

Несколько пунктов.

  • Во-первых, первый аргумент NSLog – это спецификатор формата. Он полностью эквивалентен спецификатору формата, используемому в [NSString stringWithFormat:] и редко возникает необходимость в обоих.
  • Далее, данные в Objective-C могут быть индивидуальными значениями int значениями char значениями char* (которые являются строками C), значениями float и объектными значениями Objective-C. (Плюс несколько различных длинных, неподписанных и т. Д. Значений, которые вы редко используете.)
  • NSString – объект Objective-C, а также NSNumber. С другой стороны, NSInteger является псевдонимом для определенного размера int и обычно взаимозаменяемым с int . Очень часто люди путаются с NSNumber (объект) и NSInteger (скалярный int) – они не совпадают.
  • В спецификаторе NSLog или stringWithFormat вы используете % за которым следует один или несколько символов, чтобы указать способ форматирования значения (в следующем списке значений). %d или %i является int . ( %d является предпочтительным.) %f – это простое значение с плавающей запятой (но форматирование их может усложниться). %s – строка в стиле C (т. е. значение char* ). %@ используется для форматирования объекта Objective-C. Вы используете %@ , в частности, для форматирования NSString или (для получения представления по умолчанию) NSNumber.

Важно понимать, как %@ работает в строке формата. Когда интерпретатор формата встречает его, он интерпретирует следующий элемент в списке значений как указатель на объект Objective-C и вызывает метод description этого объекта. NSString просто возвращает себя в результате description , а NSNumber возвращает NSString, который представляет представление символа значения числа. Другие объекты (все объекты поддержки объектов Objective-C, если только по умолчанию) возвращают либо простую идентификацию типа объекта, либо представление внутренних значений объекта.

Итак, если у вас есть NSNumber, вы можете напрямую форматировать его с помощью %@ , или вы можете извлечь числовое значение (например, [someNSNumber intValue] ), а затем соответствующим образом отформатировать это значение (например, %d ). Причиной для последнего было бы, если бы вы хотели указать ширину столбца для числа (например, %5d , чтобы отформатировать номер в поле с 5 позициями).

См. Здесь некоторые детали (gory) о различных спецификаторах формата.

Подсказка: %i – спецификатор преобразования для int .

один из них я считаю INT или NSNumber, не знаю, что такое автоматическое преобразование

Теперь вернитесь и прочитайте документацию NSArray , подумайте о том, может ли он содержать int s, а затем продолжить чтение.


Таким образом, объекты в словаре являются экземплярами NSNumber -> они объекты Objective-C -> они реализуются с помощью указателей. Poor NSLog() пытается преобразовать значение указателя в целое число. Либо используйте %@ чтобы получить описание номера, либо %i и [theNumber intValue] чтобы напечатать его целочисленное значение.