Я работал над приложением, которое обрабатывает это точное поведение в течение последних 2 месяцев или около того. Он имеет небольшое подмножество функций, которые доступны только в сети, и большой набор функций, которые находятся в автономном режиме / онлайн.
Я использую sqlite для локального хранения, как предложено здесь с модифицированной версией библиотеки sqlitepersistentobjects. Базовая версия sqlitepersistentobjects не является поточно-ориентированной, поэтому следите, если вы ее используете. (проверьте значение параметра targetrecord в: tasksyncc , чтобы найти альтернативу, ориентированную на многопотоковое исполнение, но будьте готовы углубиться в код). Если вы готовы разрабатывать для 3.0 SDK, то основные данные - это еще одна возможность для библиотеки sqlite.
Общая архитектура достаточно проста. Я смоделировал локальное хранилище, используя sqlite и удаленное взаимодействие, используя целевой ресурс с приложением rails и REST API. Он может использовать xml или json для сериализации данных.
Когда объект изменяется локально, изменение сначала сохраняется в записи базы данных sqlite для этого объекта, а затем добавляется в очередь, которая сериализуется и также сохраняется в локальной базе данных sqlite. (Очередь может быть обработана в любое время)
Если доступно соединение, любые локальные изменения в очереди десериализуются и добавляются в NSOperationQueue, который затем обрабатывает их в фоновом режиме.
Чтобы все это работало, я подклассифицировал NSOperation, чтобы он мог поддерживать несколько типов операций с удаленной очередью - создавать, обновлять, удалять, по существу, используя целевой ресурс для выполнения удаленных запросов.
Хорошая особенность использования NSOperationQueue и NSOperation заключается в том, что они обрабатывают фоновую многопоточность для вас, поэтому я настоятельно рекомендую взглянуть на документы Apple для этих классов, а также на руководство по apple *1018*.
Когда приложение загружается, выполняется некоторая удаленная проверка и выполняется в фоновом режиме, чтобы получить последние данные - хотя, если честно, я все еще изменяю способ, которым это ведет себя немного.
Это краткий обзор того, с чем мне приходилось иметь дело ... надеюсь, это немного поможет.