Reputation: 29518
I'm trying to do show an alert the first time the app is launched. I'd also like to show this alert if they go into a settings page later on and want to see it again. I figured I could set a boolean in the NSUserDefaults
. I'm not quite sure how to do that though (assuming this approach is right). I thought in applicationDidFinishLaunching:options
, I could get the value for key @"FirstTimeLaunched"
, and in applicationWillTerminate
, I could set the object for that key to NO
. If this is the case, how do I get the BOOL
to be YES
for the first time?
Also, do I need to set it to NO
in didEnterBackground
mode as well? Thanks.
Upvotes: 2
Views: 1826
Reputation: 2499
Just think it backwards, instead of expecting a YES
, set a variable when the app is actually launched, and remove it when the user says so in the settings.
At launch:
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasBeenLaunched"]) {
// show your only-one-time view
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasBeenLaunched"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
And when the user wants to see it again, just remove the key:
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"hasBeenLaunched"];
When accessing a key that does not exists, NSUserDefaults
will return nil
.
Upvotes: 5
Reputation: 6401
First time App is launched, so I don't think you will ever need to set that BOOL
to NO
. UserDefaults
gets deleted if App is removed. and we set it when App is first launched application didFinishLaunchingWithOptions:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstTimeLaunched"];
[[NSUserDefaults standardUserDefaults] synchronize];
If you set Bool
to NO
in applicationWillTerminate
, then everytime user kills app from tray you will show alert on app launched. Again it depends on your business requirements.
Upvotes: 0
Reputation: 5393
I would take the opposite approach and first launch check for a key called appHasLaunchedPreviously.
If it's yes then bypass the alert. If it's not YES then show the alert and immediately set it ready for next time.
Upvotes: 0