Форум программистов, компьютерный форум CyberForum.ru

IntegerValue всегда возвращает 1 - Objective-C

Восстановить пароль Регистрация
 
BigDanceMouse
 Аватар для BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:02     IntegerValue всегда возвращает 1 #1
Доброго, вам, времени суток!
Столкнулся со следующей проблемой: имею NSNumber, который сохраняется в числовом формате (получаем, например, строку @"1,775"). В другом контроллере нужно из этой строки выдернуть int или NSInteger (не принципиально, хоть double) но вот например integerValue, как и подобные ему, всегда возвращает 1. Сохраненные данные, к сожалению пока не могу изменить, по этому прошу вашей помощи в том, как мне достать из NSString это число.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 11:07     IntegerValue всегда возвращает 1 #2
Я верно понимаю?
1. Вы берете строку @"1,775"
2. Вызываете [@"1,775" integerValue]
3. Полученное значение всегда равно 1.

Что вы ожидаете чтобы было возвращено?
BigDanceMouse
 Аватар для BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:10  [ТС]     IntegerValue всегда возвращает 1 #3
Да, все правильно.
Хотелось бы получить
Objective-C
1
2
3
NSInteger a = 1775;
или
int a = 1775;
Добавлено через 56 секунд
flout тоже, как ни странно, возвращает 1. Не 1,000000 а именно 1
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 11:11     IntegerValue всегда возвращает 1 #4
BigDanceMouse, а разделение запятой?

Код покажите.
BigDanceMouse
 Аватар для BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:15  [ТС]     IntegerValue всегда возвращает 1 #5
строка @"1,775" создается путем записи в файл экземпляра NSNumber отформатированного как NSNumberFormatterDecimalStyle, по этому, в зависимости от региона настроек она имеет вид @"1,775", @"1 775" и т.д. Но изначально оно является int = 1775
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 11:22     IntegerValue всегда возвращает 1 #6
Если вы работаете с NSNumberFormatter пользуйтесь методами его:
Objective-C
1
2
- (NSString *)stringFromNumber:(NSNumber *)number;
- (NSNumber *)numberFromString:(NSString *)string;
Предварительно вызвав:
Objective-C
1
- (void)setNumberStyle:(NSNumberFormatterStyle)style;
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
29.07.2014, 11:25     IntegerValue всегда возвращает 1 #7
Цитата Сообщение от BigDanceMouse Посмотреть сообщение
NSNumber отформатированного как NSNumberFormatterDecimalStyle
Так тем же форматтером и доставайте из строки.

Кстати зачем нужна-то такая цепочка NSNumber -> NSString -> NSNumber ? Чем вас NSNumber сам по себе не устраивает?
BigDanceMouse
 Аватар для BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:27  [ТС]     IntegerValue всегда возвращает 1 #8
Создание
Objective-C
1
2
3
4
5
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [NSNumber numberWithInt:varWithIntValue];
NSString *stringForSaving = [formatter stringFromNumber:number];
myAnotherController savingData:stringForSaving;
И попытка получить
Objective-C
1
2
NSInteger value = [[arrayWithData objectAtIndex:0] integerValue];
//Всегда получается 1, а NSValue == nill
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 11:54     IntegerValue всегда возвращает 1 #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
BigDanceMouse, еще раз. Как сохраняете - так и получайте:
Objective-C
1
2
- (NSString *)stringFromNumber:(NSNumber *)number;
- (NSNumber *)numberFromString:(NSString *)string;
Ваше получение должно быть таким:
Objective-C
1
2
3
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:arrayWithData[0]];
Где arrayWithData[0] - NSString
BigDanceMouse
 Аватар для BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:58  [ТС]     IntegerValue всегда возвращает 1 #10
Да, спасибо! Я только что так попробовал и все заработало! Я повелся на то что в логи написано NSString и даже не подумал преобразовать ее назад в NSNumber.

Добавлено через 2 минуты
А НСНамбер получится записать в файл? Если - да, то так бы конечно было лучше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2014, 12:01     IntegerValue всегда возвращает 1
Еще ссылки по теме:

Android GetIdentifier всегда возвращает 0
PHP Условие всегда возвращает false
PHP БД Mysqli_nun_row() всегда возвращает 1
C++ Почему функция всегда возвращает 0?
Delphi БД LAST_INSERT_ID всегда возвращает 0

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 12:01     IntegerValue всегда возвращает 1 #11
BigDanceMouse, преобразовываете в NSData, потом пишете в файл.
Один из самых простых вариантов, так как NSNumber это наследник NSValue, а NSValue поддерживает NSCoding:
Objective-C
1
2
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:number];
    [data writeToFile:<#FilePathToWrite#> atomically:YES];
Yandex
Объявления
29.07.2014, 12:01     IntegerValue всегда возвращает 1
Ответ Создать тему
Опции темы

Текущее время: 20:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru