views:

171

answers:

2

I have an iPhone app that stores some settings using NSUserDefault standardUserDefaults. When I add new features to the app I need to add new default settings and so I have to migrate/upgrade the NSUserDefaults. For now I just store the version number and check this when the app is launched but it has quickly become very messy as I have to add lots of if statements. I cannot assume that the user is just upgrading from the previous version but perhaps even a couple of versions before.

I like the way that CoreData seems to handle migrating table changes but I want to provide 2.2.1 SDK compatibility and of course CoreData is not the same thing as NSUserDefaults.

Any suggestions or best practices?

+1  A: 

Hmm… I wouldn't "upgrade" the user defaults in this way, but instead query NSUserDefaults as usual, only if the default isn't set (objectForKey will return nil in that case), use a default value (which may then be written back to the user defaults to save time the next time). Since you'll have to do this every time a "new" default (i.e. one that didn't exist in 1.0) is read, I advise doing a wrapper class/file that does this, this way the code is written only once for each "new" default.

Pierre Lebeaupin
A: 

Also, while the question/problem is different, this answer works just as well in your case.

Pierre Lebeaupin