Poslední upravenou časovou značku ukládám do databáze jak v základních záznamech dat v telefonu, tak v tabulkách mysql na serveru.
Telefon vyhledá vše, co se od poslední synchronizace změnilo, a odešle to na server spolu s časovým razítkem poslední synchronizace a server odpoví se vším, co se na jeho konci od poskytnutého časového razítka synchronizace změnilo.
Výkon je problém, když se změnilo hodně záznamů. Synchronizaci provádím na pozadí NSOpeartion, které má svůj vlastní kontext spravovaného objektu. Když vlákno na pozadí dokončí změny v kontextu svého spravovaného objektu, existuje API pro sloučení všech změn do kontextu spravovaného objektu hlavního vlákna – které lze nakonfigurovat tak, aby jednoduše zahodilo všechny změny, pokud dojde ke konfliktům způsobeným uživatel mění data, zatímco probíhá synchronizace. V takovém případě jen pár sekund počkám a poté se pokusím provést synchronizaci znovu.
Na starším hardwaru bylo i po mnoha optimalizacích nutné synchronizaci úplně přerušit, pokud uživatel začne v aplikaci něco dělat. Jednoduše to spotřebovalo příliš mnoho systémových prostředků. Myslím, že modernější zařízení se systémem iOS jsou pravděpodobně dostatečně rychlá, takže to už nemusíte dělat.
(mimochodem, když jsem řekl „změnilo se mnoho záznamů“, měl jsem na mysli přibližně 30 000 řádků, které se aktualizují nebo vkládají do telefonu)