NSNumber и поплавок?

Я пытаюсь установить NSNumber как значение с плавающей запятой, которое было загружено с помощью NSUserDefaults, но я получаю сообщение об ошибке. Я не могу понять, почему...?

Вот мой код:

[settingsData.sensitivitySettingValue floatValue] = [[NSUserDefaults standardUserDefaults] floatForKey:@"sensitivityKey"];

Это работает, если я использую поплавок сам по себе (т.е. float myFloat = [[NSUserDefaults standardUserDefaults] floatForKey:@"sensitivityKey"]

, но я хочу, чтобы значение было доступно для всех контроллеров представления, поэтому я определил его в классе модели как NSNumber.

Итак, пожалуйста, кто-нибудь сможет посоветовать мне, почему это утверждение не сработает?


person Adam Waite    schedule 21.11.2011    source источник
comment
Что такое тип self.sensitivitySettingValue?   -  person beryllium    schedule 21.11.2011


Ответы (5)


принимая settingsData как объект вашего класса модели данных, где чувствительностьSettingValue - это переменная, объявленная как NSNumber, использующая что-то вроде

[settingsData.sensitivitySettingValue floatValue]

на самом деле извлекает свое значение, а не устанавливает для него значение с плавающей запятой. Вы можете использовать запись через точку, такую ​​как settingsData.sensitivitySettingValue = [NSNumber numberWithFloat:[[NSUserDefaults standardUserDefaults] floatForKey:@"sensitivityKey"]];

или что-то вроде

[settingsData setSensitivitySettingValue:[NSNumber numberWithFloat:[[NSUserDefaults standardUserDefaults] floatForKey:@"sensitivityKey"]]];

Надеюсь, поможет

person Rahul Sharma    schedule 21.11.2011
comment
Спасибо, я тебя понял. Там не хватало какого-то фундаментального понимания. - person Adam Waite; 21.11.2011
comment
Эй, ты не против взглянуть на этот вопрос? Думаю, я упустил что-то еще... stackoverflow.com/questions/8216139/ - person Adam Waite; 21.11.2011

Похоже, вы пытаетесь присвоить переменную методу получения, судя по вашему синтаксису. Что делает floatValue? Вернуть значение или присвоить его?

person Senior    schedule 21.11.2011

Можешь попробовать

+ (NSNumber *)numberWithFloat:(float)value;

способ присвоения значения. Вот документы.

person Himanshu A Jadav    schedule 21.11.2011

[settingsData.sensitivitySettingValue setFloatValue:[[NSUserDefaults standardUserDefaults] floatForKey:@"sensitivityKey"]];

Убедитесь, что settingsData.sensitivitySettingValue поддерживает метод setFloatValue.

person Aliaksandr Andrashuk    schedule 21.11.2011
comment
Если settingsData.sensitivitySettingValue возвращает NSNumber, это вызовет исключение, потому что NSNumber не отвечает на -setFloatValue: Не голосовать против, потому что не совсем ясно, является ли возвращенный объект номером NSN из вопроса. - person JeremyP; 21.11.2011

Если вы хотите создать NSNumber из float:

float myFloat = [[NSUserDefaults standardUserDefaults] floatForKey:@"sensitivityKey"];
NSNumber *number = [NSNumber numberWithFloat:myFloat];
// settingsData.sensitivitySettingValue = number; - not sure in type of properties

NSUserDefaults также отвечает на метод objectForKey, вы можете сохранять/загружать NSNumber без приведения

person beryllium    schedule 21.11.2011