0

我的一个视图控制器中有一些元素,我为其设置了恢复,以便在视图之间导航以及程序终止时保存值。所有值都根据需要保存,除了以下一个例外,它是一个 BOOL,每次重新打开视图时都会恢复为“0”。

这是我在视图控制器标头中声明变量的地方:

@interface TankViewController : UIViewController <UITextFieldDelegate>

{
BOOL bigTank;
}

这是我的视图控制器实现文件中的代码。所有其他元素都以相同的方式保存和工作,而这个元素一直恢复为 NO/“0”:

// Restoration of user fields
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
// tank selector segmented control for equation
    [coder encodeBool:bigTank forKey:@"bigTankEquation"];


// these are necessary to set the NSUserDefaults if the user terminates the app without going back to the menu first

// tank size state
[[NSUserDefaults standardUserDefaults] setBool:bigTank forKey:@"bigTankRestore"];

[super encodeRestorableStateWithCoder:coder];

}

- (void)decodeRestorableStateWithCoder:(NSCoder *)coder
{

// tank size state
bigTank = [coder decodeBoolForKey:@"bigTankEquation"];

[super decodeRestorableStateWithCoder:coder];

}

// this will save states when going back and forth between views

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];

// tank size state
[[NSUserDefaults standardUserDefaults] setBool:bigTank forKey:@"bigTankRestore"];

[[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)viewWillAppear:(BOOL)animated
{
    // checks whether or not the view has launched already. If it has not, viewDidLoad handles initialization and NSUserDefaults are updated to change flag to YES. Subsequent loads will restore using NDUserDefaults for view-to-view restore and encode/decode for background/terminate/restart restore

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TCVHasLaunchedOnce"])
    {
        // view already launched

        [super viewWillAppear:animated];

// tank size state
        bigTank = [[NSUserDefaults standardUserDefaults] boolForKey:@"bigTankEquationRestore"];

        [[NSUserDefaults standardUserDefaults] synchronize];

        NSLog(@"This is a subsequent launch of the Tank Calculator View");

    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TCVHasLaunchedOnce"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        // This is the first launch ever
        NSLog(@"This is the first launch of the Tank View");
    }



}

真正疯狂的是,我的控制台在返回视图后立即看起来是这样的:

2014-02-17 02:38:48.301 myapp[5086:60b] bigTank value = 0
2014-02-17 02:38:48.302 myapp[5086:60b] bigTank current Default = 1

默认值如何保存为 1,但值为 0 对我来说是不可理解的。任何帮助将不胜感激。谢谢!

4

0 回答 0