what am i missing here?
-registerDefaults:
doesn't do what you think it does. Use -setBool:forKey:
instead.
-registerDefaults:
is used to ensure that values exist for certain keys in the defaults system. There's no need to call -synchronize
after that method because the values in the registration domain are never saved. You probably meant to use that method to set up the default value YES
for isFirstLaunch
, but your code checks the value for the key before you register the default value! which defeats the purpose of the method. Proper use would be to call -registerDefaults:
first, and then check the value associated with the key, and if the value is YES
then call -setBool:forKey:
to save the value NO
.
A simpler option to detect the first launch would be to invert the question. Skip the -registerDefaults:
call altogether and change the key to appHasRunPreviously
. If no value is stored for a given key, -boolForKey:
will return NO
. If that happens, you know that this is the first time the app is running, and you should save YES
for that key using -setBool:forKey:
.