Some changes I've found useful

Hi Jonathan,
Further to my email earlier, here's some changes:
1. I've added a callback on each individual object that gets called after its synced. I use this to set a flag on each object to mark it as being in the database. I use this during the initial seed phase so that it knows which rows it needs to upload to the datastore (useful if you turn sync off for a bit, then re-enable it)

2. I've added an optional callback that a managed object can provide to tweak the exact data that gets uploaded to Dropbox. Personally I use this to *remove* fields that I don't want synced (e.g. address book contact IDs that won't be consistent between devices) but there's no reason you couldn't use it to add supplementary meta data as well

3. Added selective sync, so only certain rows get synced

4. Implemented the fix I discussed to only store one-to-many relationships on one side

5. I made the syncDatastore method public. In my project, I store some extra app settings in the datastore in addition to the core data stuff, and it's useful to be able to trigger a sync when those fields change

I've added unit tests for everything as far as I could.