I’m making an iPhone bitmap painting app. I want to support about five 1024×768 layers (~15Mb of data). My problem is that I do not know what strategy to use for saving the user’s document to cope with my app being interrupted.
My document file format at the moment is to save each layer as a .png file and then save a short text file that contains the layer metadata. My problem is that, if the app is interrupted by something like a phone call, I’m unlikely going to have enough time for my app to be able to save all the data to disk as saving all the .png files can take ~10 seconds. What options do I have?
I’ve considered adding an autosave feature that would be called every five minutes. In the worst case, the user will lose a few minutes of work if the app fails to save on interruption (which isn’t ideal).
An idea I’ve considered is to keep track of which layers have changed since the last autosave and only update the layer files that need to be updated. This means that, when interrupted, my app might only need to save one layer in the typical case. However, the worse case is still having to save several layers.
I’m not sure what to do. On a practical note, I’ve noticed many popular iPhone painting apps with good reviews will lose the current document progress if interrupted with a phone call. I’m beginning to doubt there is a way to solve this particular problem and that I might just have to go with something less than ideal.
The IOS4 SDK provides support for long-running background tasks, which would be the perfect place to save your layers. From the documentation: