NSUserDefaults,仅在首次加载时执行某些操作

时间:2011-11-02 15:58:59

标签: iphone nsuserdefaults

我正在尝试在第一次启动应用时显示提醒。如果他们稍后进入设置页面并希望再次看到它,我也想显示此警报。我想我可以在NSUserDefaults中设置一个布尔值。我不太清楚如何做到这一点(假设这种方法是正确的)。我在applicationDidFinishLaunching:options中想到,我可以获得密钥@"FirstTimeLaunched"的值,而在applicationWillTerminate中,我可以将该密钥的对象设置为NO。如果是这种情况,我如何首次将BOOL设为YES

另外,我还需要在NO模式下将其设置为didEnterBackground吗?感谢。

3 个答案:

答案 0 :(得分:5)

只需反思它,而不是期待YES,在应用实际启动时设置变量,并在用户在设置中这样说时将其删除。

发布时:

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasBeenLaunched"]) {
    // show your only-one-time view
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasBeenLaunched"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

当用户想要再次看到它时,只需删除密钥:

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

访问不存在的密钥时,NSUserDefaults将返回nil

答案 1 :(得分:0)

首次推出应用,因此我认为您不需要将BOOL设置为NO。如果移除了应用,则UserDefaults会被删除。我们在App首次启动应用程序didFinishLaunchingWithOptions:

时设置它
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstTimeLaunched"];
[[NSUserDefaults standardUserDefaults] synchronize];

如果您在Bool中将NO设置为applicationWillTerminate,则每次用户从托盘中杀死应用时,您都会在启动的应用中显示提醒。这又取决于您的业务需求。

答案 2 :(得分:0)

我会采取相反的方法,首先启动检查appHasLaunched的密钥。

如果是,则绕过警报。 如果不是,则显示警报并立即为下次准备好。