NSUserDefaults: сохраненный номер всегда 0, iPhone - PullRequest
0 голосов
/ 19 апреля 2010

Я посмотрел на другие ответы и документы. Может быть, я что-то упустил, или, может быть, у меня есть другая проблема. Я пытаюсь сохранить число при выходе из приложения, а затем, когда приложение загружено, я хочу проверить, существует ли это значение, и принять соответствующие меры. Вот что я попробовал:

Для экономии при выходе:

- (void)applicationWillTerminate: (UIApplication *) application
{
 double save = [label.text doubleValue]; // This could be the issue

//double save = 3.5; // This works, it saves the value and loads it fine, so that is not the problem here.

 [[NSUserDefaults standardUserDefaults] setDouble: save forKey: @"savedNumber"];
 [[NSUserDefaults standardUserDefaults] synchronize]; 
}

Для проверки:

- (IBAction)buttonclickSkip{

 double save = [[NSUserDefaults standardUserDefaults] doubleForKey: @"savedNumber"];

 if (save == 0) {

    [self performSelector:@selector(displayAlert) withObject:nil];

    test.enabled = YES;
    test.alpha = 1.0;

    skip.enabled = NO;
    skip.alpha = 0.0;

   }

 else {

 label.text = [NSString stringWithFormat:@"%.1f %%", save]; 
}

}

Проблема в том, что у меня всегда отображается предупреждение, сохраненное значение не помещается в метку, поэтому как-то == 0 всегда верно. Почему бы:

double save = [label.text doubleValue];

всегда равен нулю? Прежде чем закрыть приложение, число в этом ярлыке составляет примерно 0,5% (оно варьируется). Если это имеет какое-то значение, я проверяю это на симуляторе iPhone.

Большое спасибо,

Stu

Ответы [ 3 ]

1 голос
/ 19 апреля 2010

Убедитесь, что ваша реализация applicationWillTerminate: находится в классе делегата приложения.

1 голос
/ 19 апреля 2010

Тот факт, что вы можете жестко закодировать значение и получить его обратно, означает, что проблема определенно связана с вашим взаимодействием с label.text, а не с использованием NSUserDefaults.

Убедитесь, что метка еще не была уничтожена во время загрузки ее значения. Поскольку приложение завершает работу, оно, возможно, уже отключило представление, из которого вы извлекаете значение.

Еще одна попытка - получить сам текст, вместо того, чтобы просить ОС сначала преобразовать текстовое значение в число. Если вы распечатаете это, вы можете получить некоторое представление о том, что происходит.

0 голосов
/ 19 апреля 2010

Я думаю, что текст в вашем ярлыке не является допустимым двойным значением. Из документов Apple для NSString -doubleValue:

Возвращает 0.0, если получатель не начать с правильного текстового представления числа с плавающей точкой.

Убедитесь, что вы передаете что-то вроде @ "13.2". Лучший способ проверить это - вставить вызов NSLog сразу после создания переменной save.

...