【问题标题】:Store a value for the app's running time存储应用程序运行时间的值
【发布时间】:2014-05-30 06:28:38
【问题描述】:

我需要存储一个布尔值,该值只会在应用程序的运行时间内持续存在。当用户退出应用程序(也从后台)时,该变量应重置为默认值。我该怎么做?

我尝试了常量。我将常量保存在单独的 .h 文件中。在里面我是这样声明的。

const BOOL hasShownTutorial = NO;

在视图控制器中,

if (hasShownTutorial == NO) {
    [self showAppTutorial];
    hasShownTutorial = YES;
}

我在hasShownTutorial = YES; 收到一个错误,说只读变量不可分配。

我也尝试过使用NSUserDefaults 来解决这个问题。但问题是,一旦你设置了值,它就会永久存储。有没有办法在应用退出时清除它?

非常感谢您的意见和建议。

谢谢。

【问题讨论】:

    标签: ios objective-c boolean constants nsuserdefaults


    【解决方案1】:

    将其存储在NSUserDefaults 中的特定键下。

    [[NSUserDefaults standardDefaults] setBool:<myBool> forKey:@"myKey"];
    

    然后再检索它。

    BOOL b = [[NSUserDefaults standardDefaults] boolForKey:@"myKey"];
    

    如果要清除数据。

    NSString *domain = [[NSBundle mainBundle] bundleIdentifier];
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:domain];
    

    例如,在你的AppDelegate-applicationWillTerminate: 的实现中,只需清除数据即可。

    - (void)applicationWillTerminate:(UIApplication *)application
    {
        NSString *domain = [[NSBundle mainBundle] bundleIdentifier];
        [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:domain];
    }
    

    编辑:如果第一种清除数据的方法不起作用,可以使用类方法+resetStandardUserDefaults。例如,以下将清除当前默认值。

    [NSUserDefaults resetStandardUserDefaults];
    

    第三种可能性是专门删除一个属性。

    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myKey"];
    

    【讨论】:

    • 如果我终止应用程序(2x Home,向上滑动),是否会调用 applicationWillTerminate?
    • 我试过这个并且它有效:) 但是我有一个问题。是否可以删除applicationWillTerminate 中的特定值,例如this
    • @LordZsolt 是的。它在应用程序退出之前被调用。对于 2x home,向上滑动,这可能会进入后台状态,并且在应用程序委托中还有另一种方法。
    • @Isuru 如果你这样删除它,下次启动时该值将为零。您不想将其重置为默认值吗? (尽管为此您应该使用 setValue:defaultValue forKey:key
    • @LordZsolt 是的,我只需要知道。我不会对我正在开发的这个应用程序这样做。谢谢:)
    【解决方案2】:

    您无法更改const 的值,因为它是只读存储器。请改用 static 关键字。

    【讨论】:

    • 我忘了说,我也做过。但没有完成我想要的。
    • 当我再次加载视图控制器时,该值会自行重置。没关系。我找到了一个适用于 NSUserDefaults 的解决方案 :)
    • 您可能在viewDidLoad 中更改了它。此外,如果您不需要存储数据,则使用持久存储(如 NSUserDefaults)也不是一个好习惯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2010-09-15
    相关资源
    最近更新 更多