Требовать целочисленное значение, а не адрес памяти, избегая при этом недопустимого предупреждения компилятора типа получателя - PullRequest
0 голосов
/ 06 января 2011

У меня есть следующий код:

int days = [[SettingsUtils daysToRetainHistory] intValue];
[retainHistory setText:[NSString stringWithFormat:@"Days to retain History: %d", days]];
[daysToRetainHistory setValue:days animated:NO];

, где [SettingsUtils daysToRetainHistory] выглядит следующим образом;

+ (int) daysToRetainHistory {
    return (int)[[NSUserDefaults standardUserDefaults] objectForKey:@"CaseBaseDaysToRetainHistory"];
}

Я получаю предупреждение компилятора Invalid receiver type 'int', потому что я вызываю intValue наint, но если я не сделаю этого, я не смогу вывести целочисленное значение и всегда получу адрес памяти, т. е. 98765432 вместо 9, который разрушает дисплей UILabel [retainHistory] и UISlider [daysToRetainHistory] value.

Как избежать предупреждения компилятора и получить целое значение в метке и необходимое значение с плавающей запятой для установки значения UISlider?

1 Ответ

2 голосов
/ 06 января 2011

Это потому, что вы приводите адрес памяти к int, значение int не работает. Вместо этого просто используйте метод, который вы хотите из NSUserDefaults:

+ (NSInteger)daysToRetainHistory
{
  return [[NSUserDefaults standardUserDefaults] integerForKey:@"CaseBaseDaysToRetainHistory"];
}

тогда просто используйте его напрямую:

NSInteger days = [SettingsUtils daysToRetainHistory];

Вы также должны хранить свои дни тем же способом:

[[NSUserDefaults standardUserDefaults] setInteger:days forKey:@"CaseBaseDaysToRetainHistory"];

Хотя, если вы установите объект NSNumber и он на самом деле содержит целое число, это тоже будет хорошо работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...