1

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. 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?

yuji
  • 16,695
  • 4
  • 63
  • 64
Rob
  • 13
  • 3

1 Answers1

3

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.

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

Community
  • 1
  • 1
Pierre Lebeaupin
  • 1,103
  • 8
  • 20