J'ai besoin de mettre en cache les données JSON de l'API dans Swift. J'ai donc fait beaucoup de recherches et arriver à cette Post .
J'ai essayé d'implémenter l'option 1 dans mon application. Mais le responsable de la douane revenait toujours à zéro. Je ne sais pas pourquoi?
Après cela, j'ai AwesomeCache . Il dit que c’est ce qu’on appelle Awesome Caching API . Mais je ne sais pas comment implémenter ceci? Je me suis référé à ce Issue . Je n'arrive toujours pas à comprendre.
Voici comment mon implémentation actuelle se présente sans cache:
Alamofire.request(.GET, "http://api.androidhive.info/volley/person_array.json")
.responseJSON { (_, _, data, _) in
let json = JSON(data!)
let catCount = json.count
for index in 0...catCount-1 {
let name = json[index]["name"].string
println(name)
}
Suggérez-moi le meilleur moyen de mettre en cache JSON à partir d'une API?
Merci d'avance!
METTRE À JOUR
Ce sont mes exigences
Récupérez le JSON à partir de l'API et analysez les données JSON. Celles-ci peuvent être réalisées à l'aide d'Alamofire & SwiftyJSON
Je vais renseigner les données analysées dans la vue Tableau. Cela fonctionne quand l'utilisateur est en ligne.
Mais je veux afficher les données de la table lorsque l'utilisateur est également hors ligne.
Je dois donc sauvegarder les données analysées ou JSON dans mon cache et actualiser ou expirer le cache en une semaine ou plusieurs jours.
Je ne préfère pas stocker le JSON sur mon disque car il sera mis à jour.
S'il vous plaît me suggérer le meilleur moyen d'y parvenir ...
Vous avez déjà de nombreux outils à votre disposition.
Toutes vos demandes sont déjà stockées dans la NSURLCache
dans la NSURLSessionConfiguration
sur la NSURLSession
stockée dans la sharedInstance
de la Alamofire Manager
. Ces demandes stockées respectent déjà toutes les règles de stratégie de mise en cache fournies par les serveurs que vous frappez. Vous pouvez contrôler le comportement de la mise en cache en définissant la variable requestCachePolicy
sur votre propre NSURLSessionConfiguration personnalisé. Je vous suggérerais également de lire cet article génial sur NSHipster qui vous explique les tenants et les aboutissants de NSURLCache et comment le contrôler.
La création d'objets
Manager
personnalisés est traitée dans le fichier Alamofire docs actuel.
Vous pouvez également télécharger le fichier JSON directement sur le disque en utilisant Alamofire.download
au lieu d’utiliser Alamofire.request
. Cela téléchargera la charge utile dans une fileURL
que vous fournissez dans la fermeture destination
. Cela vous donnerait un contrôle total sur la mise en cache du fichier après ce moment. Vous devrez ensuite créer votre propre stratégie de mise en cache autour de ces fichiers si vous souhaitez suivre les règles d'en-tête de mise en cache fournies par le serveur.
Une fois vos données téléchargées sur le disque, vous devez les charger dans un blob NSData
et les analyser en JSON pour remplir votre vue sous forme de tableau. Cela devrait être assez simple. Vous avez besoin de la destination NSURL
que vous avez spécifiée à Alamofire lorsque vous avez commencé votre téléchargement. Ensuite, chargez les données du fichier dans un blob NSData. Enfin, utilisez NSJSONSerialization pour convertir l’objet NSData
en un JSON AnyObject
qui peut être analysé en objets de modèle pour remplir votre vue sous forme de tableau.
Évidemment, vous n'avez pas "besoin" d'analyser le JSON dans les objets de modèle, mais cela permet de protéger votre vue tableau des données JSON mal formées.
Si vous vous en tenez à cette approche, vous devrez suivre les dates d'expiration de votre cache dans CoreData ou SQLite. Pour ce faire, vous pouvez soit mettre en cache les chemins d'accès aux fichiers JSON sur le disque, soit stocker les objets de modèle directement dans CoreData ou SQLite. Cela pourrait devenir assez compliqué et je ne recommanderais pas cette approche à moins que vous ne vouliez absolument pas mettre en cache vos objets de modèle.
En règle générale, si vous devez mettre les données en cache pour une utilisation hors connexion, vous souhaitez stocker vos objets de modèle dans un environnement tel que CoreData. Vous utiliseriez la méthode Alamofire request
associée à un sérialiseur responseJSON
pour analyser les données au format JSON. Ensuite, vous convertissez le JSON en objets de modèle. À partir de là, vous enregistrez vos objets de modèle dans CoreData, puis vous remplissez votre vue tableau avec les objets de modèle.
La bonne chose à propos de cette approche est que tous vos objets de modèle sont mis en cache dans le cas où vous accédez à la vue table lorsque le périphérique est hors ligne. Coupler cette conception avec des requêtes à votre NSURLCache
pour voir si votre demande est mise en cache, vous éviterez ainsi les appels de serveur inutiles et la logique d'analyse lorsque vos objets de modèle sont déjà générés.
Compte tenu des mises à jour de votre question initiale, je recommanderais cette approche.
Vous pouvez utiliser ce cache open source. Il cache les données sur le disque et la mémoire. Peut mettre en cache de nombreux types Swift et classes personnalisées qui héritent de NSObject et se conforment au protocole NSCoding.
https://github.com/huynguyencong/DataCache
Pour implémenter: D'abord, il utilise NSCache pour le cache mémoire. NSCache utilise comme un dictionnaire . Deuxièmement, sauvegardez le cache sur le disque, utilisez les méthodes NSFileManager.