С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
1

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

29.07.2014, 11:02. Просмотров 665. Ответов 10
Метки нет (Все метки)

Доброго, вам, времени суток!
Столкнулся со следующей проблемой: имею NSNumber, который сохраняется в числовом формате (получаем, например, строку @"1,775"). В другом контроллере нужно из этой строки выдернуть int или NSInteger (не принципиально, хоть double) но вот например integerValue, как и подобные ему, всегда возвращает 1. Сохраненные данные, к сожалению пока не могу изменить, по этому прошу вашей помощи в том, как мне достать из NSString это число.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2014, 11:02
Ответы с готовыми решениями:

IndexPath.row всегда выдаёт null
Подскажите, вот есть такой код, который сортирует словарь по расстоянию, нужно...

GetIdentifier всегда возвращает 0
Здравствуйте, хочу сменить изображение у imageView, для этого нужно найти id...

in_avail() всегда возвращает 0.
#include <c++/4.4/iostream> #include <c++/4.4/streambuf> int main() { ...

LAST_INSERT_ID всегда возвращает 0
что я делаю не так? MySQLQuery.SQL.Text := 'INSERT INTO docs (sid, name,...

Mysqli_nun_row() всегда возвращает 1
Даже если записей нет результат возвращает 1, эт я знаю. Но Теперь...

10
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 11:07 2
Я верно понимаю?
1. Вы берете строку @"1,775"
2. Вызываете [@"1,775" integerValue]
3. Полученное значение всегда равно 1.

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

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

Кстати зачем нужна-то такая цепочка NSNumber -> NSString -> NSNumber ? Чем вас NSNumber сам по себе не устраивает?
1
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:27  [ТС] 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
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 11:54 9
Лучший ответ Сообщение было отмечено BigDanceMouse как решение

Решение

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
1
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
29.07.2014, 11:58  [ТС] 10
Да, спасибо! Я только что так попробовал и все заработало! Я повелся на то что в логи написано NSString и даже не подумал преобразовать ее назад в NSNumber.

Добавлено через 2 минуты
А НСНамбер получится записать в файл? Если - да, то так бы конечно было лучше.
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
29.07.2014, 12:01 11
BigDanceMouse, преобразовываете в NSData, потом пишете в файл.
Один из самых простых вариантов, так как NSNumber это наследник NSValue, а NSValue поддерживает NSCoding:
Objective-C
1
2
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:number];
    [data writeToFile:<#FilePathToWrite#> atomically:YES];
1
29.07.2014, 12:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2014, 12:01

ListBox.SelectedIndex всегда возвращает 0
Всем привет! На страничке есть 4 контрола: DropDownList - который...

GetPrivateProfileInt всегда возвращает ноль
Хотел считывать значение из INI-файла, но столкнулся с такой проблемой: ...

Бинарный поиск всегда возвращает (-1)
Всегда возвращает -1 #include &lt;iostream&gt; int binary(int* m, int n,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru