一千萬個為什麽

搜索

NSUserDefaults:保存號碼總是0,iPhone

我查看了其他答案和文檔。也許我錯過了什麽,或者我可能有另一個問題。我試圖在退出應用程序時保存一個數字,然後在加載應用程序時,我想檢查該值是否存在並相應地采取措施。這是我嘗試過的:

為了節省退出:

- (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模擬器上測試它。

非常感謝,

斯圖

最佳答案

您可以對值進行硬編碼並將其恢復的事實意味著問題肯定圍繞您與 label.text 的交互,而不是您使用 NSUserDefaults

確保在獲取其值時尚未銷毀標簽。當應用程序終止時,它可能已經關閉了您從中獲取值的視圖。

要嘗試的另一件事是獲取實際文本本身,而不是要求操作系統首先將文本值轉換為數字。如果你打印出來,你可能會得到一些關於發生了什麽的線索。

轉載註明原文: NSUserDefaults:保存號碼總是0,iPhone