Сохраняемые элементы загружаются через веб-сервис на диск - PullRequest
1 голос
/ 26 августа 2009

У меня есть демон launchd, который очень часто загружает некоторые данные через веб-сервис, используя NSOperationQueue.

Мне нужно сохранить эти данные, чтобы впоследствии их можно было повторно загружать в случае сбоя, даже между сеансами (например, в случае выключения компьютера).

Это не приложение с высокой нагрузкой, оно, вероятно, получает элементы с перерывами не более 1 или 2 каждую минуту, часто с интервалом в несколько часов.

Моя первоначальная реализация без этого постоянного места выглядит следующим образом:

  1. Демон получает данные.
  2. Демон анализирует данные в объект типа MyDataObject.
  3. Daemon создает экземпляр подкласса NSOperation с MyDataObject в качестве объекта для загрузки и добавляет его в свое NSOperationQueue.
  4. NSOperationQueue проходит и загружает MyDataObject через веб-сервис, насколько это возможно.

Эта часть прекрасно работает. Часть, которую я сейчас хочу добавить, - это сохранение в случае сбоя веб-службы, выключения компьютера и т. Д.

Кажется, что я мог бы использовать NSMutableArray MyDataObjects вместе с архиватором NSKeyed (Un), содержащим все элементы, которые еще не были загружены, и наблюдение за ключом -isFinished всех операций по удалению элементов из массива, но это Похоже, что должен быть более простой способ, с меньшим количеством места для того, чтобы что-то пошло не так, особенно в том, что касается безопасности потоков.

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 26 августа 2009

Вы можете добавить две операции для каждого элемента. Первый будет хранить элемент в локальном хранилище, а второй будет зависеть от первого и удалит элемент из локального хранилища в случае успеха.

Затем, когда вы хотите восстановить какие-либо элементы из локального хранилища, вы создаете только операции хранения в облаке, а не операции локального хранения. Как и прежде, они удаляют элементы из локального хранилища только в случае успеха, а если не удается, они оставляют элементы в локальном хранилище для следующей попытки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...