apollo-ios 如何在磁盘上缓存数据?
Posted
技术标签:
【中文标题】apollo-ios 如何在磁盘上缓存数据?【英文标题】:apollo-ios How to cache data on disk? 【发布时间】:2019-07-09 11:25:05 【问题描述】:我需要将我的数据缓存在磁盘上以供离线查看,我在 apollo-ios 源中找到了 ApolloSQLite,但是我找不到 ApolloSQLite 的任何文档(我也尝试了 Google 搜索)。
环境:
Xcode 10.1
macOS 10.14.3
CocoaPods 1.5.3
Apollo (0.9.5)
SQLite.swift (0.11.5)
pod install
之后出现太多错误:
pod 'Apollo'
pod 'Apollo/SQLite'
【问题讨论】:
【参考方案1】:当我使用CocoaPods 1.5.3
时,在pod install
之后缺少源Apollo/Core
,会导致错误。我已经通过将 CocoaPods 升级到 1.6.0 来修复它。
顺便说一句,原来的问题是如何使用 ApolloSQLite? 因为我没有找到任何关于 ApolloSQLite 的文档。经过太多的搜索和查询,我将我的步骤列出如下以寻求其他人的帮助:
-
使用 CocoaPods 管理库:
pod 'Apollo' pod 'Apollo/SQLite'
需要一个文件路径来保存用于缓存数据的 sqlite 文件。粘贴我的代码供参考:
func temporarySQLiteFileURL() -> URL
let applicationSupportPath = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).first!
let dbPath = applicationSupportPath + "/com.[special name].cache"
if !FileManager.default.fileExists(atPath: dbPath)
try? FileManager.default.createDirectory(atPath: dbPath, withIntermediateDirectories: true, attributes: nil)
let url = URL(fileURLWithPath: dbPath)
return url.appendingPathComponent("db.sqlite3")
配置 ApolloClient:
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 10
let url = URL(string: self.graphQLApiAddress!)!
let networkTransport = HTTPNetworkTransport(url: url, configuration: configuration)
let cache = try? SQLiteNormalizedCache(fileURL: temporarySQLiteFileURL())
let store = ApolloStore(cache: cache ?? InMemoryNormalizedCache())
self.apolloClient = ApolloClient(networkTransport: networkTransport, store: store)
【讨论】:
阿波罗入门的完美指南。遗憾的是文档中关于入门的信息很少以上是关于apollo-ios 如何在磁盘上缓存数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用 azure cli/bash 在 Azure VM 的“实时”数据磁盘上更新缓存设置
如何在巨大的 CollectionView 中使用 SDWebImage 或 AFNetworking 在磁盘上缓存图像?