2009-08-25 8 views
1

J'ai un démon launchd qui télécharge parfois des données via un service Web à l'aide de NSOperationQueue.Objets persistants en cours de chargement via le service Web sur le disque

Je dois pouvoir conserver ces données, à la fois pour pouvoir les télécharger ultérieurement en cas d'échec, même entre les sessions (par exemple, en cas d'arrêt de l'ordinateur).

Ce n'est pas une application à forte charge, il reçoit probablement des articles par intermittence pas plus de 1 ou 2 par minute, souvent avec des intervalles de plusieurs heures entre les deux.

Ma mise en œuvre initiale sans cette persistance en place est la suivante:

  1. Daemon reçoit des données. Daemon analyse les données dans un objet de type MyDataObject. Daemon crée une instance de sous-classe NSOperation avec MyDataObject comme objet à télécharger et l'ajoute à sa file d'attente NSOperationQueue.
  2. NSOperationQueue passe en revue et télécharge MyDataObject via le service Web comme il est capable.

Cette partie fonctionne très bien. La partie que je veux maintenant ajouter est la persistance en cas de défaillance du service web, arrêt de l'ordinateur, etc.

Il semble que je pourrais utiliser un NSMutableArray de MyDataObjects avec NSKeyed (Un) archiver contenant tous les éléments qui avaient pas encore été téléchargé et observation de la clé -isFinished de toutes les opérations pour supprimer des éléments du tableau, mais il semble qu'il devrait y avoir une façon plus simple de faire, avec moins de place pour que les choses tournent mal, surtout en ce qui concerne la sécurité va.

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

1

Vous pouvez ajouter deux opérations par élément. Le premier stockait l'élément dans le stockage local et le second dépendait du premier et supprimait l'élément du stockage local en cas de succès. Ensuite, lorsque vous souhaitez restaurer des éléments à partir du stockage local, vous créez uniquement les opérations de stockage vers le cloud, pas les opérations de stockage local. Comme précédemment, ils ne retirent les éléments du stockage local que s'ils réussissent, et s'ils échouent, ils laissent les éléments dans le stockage local pour la prochaine tentative.