swift - 在数据库中创建新数据后更新 URLSession
问题描述
我正在使用以下内容:
阿波罗 iOS
Neo4j 数据库(带有 GraphQL 插件)
GraphQL
用于连接的单例类
我下面的代码是连接到恰好是我的 Neo4j 数据库的 GraphQL 端点。
class Network {
static let shared = Network()
private(set) lazy var apollo: ApolloClient = {
let url = URL(string: "http://localhost:7474/graphql/")!
let keychain = KeychainSwift()
let configuration = URLSessionConfiguration.ephemeral
configuration.httpAdditionalHeaders = ["Authorization": "\(String(describing: keychain.get("neo.auth")))"]
return ApolloClient(
networkTransport: HTTPNetworkTransport(url: url, session: URLSession(configuration: configuration))
)
}()
}
当我通过我的应用程序在我的数据库中创建数据时,这很有效,但是如果我随后查询数据库以返回所有数据,则找不到新创建的数据。数据在数据库中,因为我可以在浏览器中看到它,如果我重新启动我的应用程序然后运行完全相同的代码来返回所有数据;它返回它。
我尝试做的另一件事是在模拟器中并排运行我的应用程序的两个实例。这两个应用程序具有相同的功能,并且可以导入/导出数据。当我通过一个实例创建新数据时,数据在数据库中成功创建,但是在应用程序的另一个实例中导入数据时 - 它什么也不返回(两个应用程序同时运行)。
我的导入代码
func importData(){
let apollo = Network.shared.apollo
//Import all data from the graph database
apollo.fetch(query: GetAllQuery()) { result in
guard let data = try? result.get().data else { return }
print(data.jsonObject.values)
}
}
我唯一能想到的是,当在数据库中创建新数据时,会话没有更新。我觉得这是因为如果我重新启动应用程序并运行我的导入功能,它实际上会返回所有新数据。创建新数据时我需要更新连接,有没有办法在创建数据时刷新连接?
解决方案
我找到了一个到目前为止对我有用的修复程序:
apollo.clearCache()
我在对数据库运行查询之前使用它,到目前为止它已经提取了所有正确的数据。我的问题是,当我将数据导出到数据库然后尝试直接导入(或读取)它从未返回任何内容或返回系统中已经存在的数据之后。
推荐阅读
- kinect - 为 Xbox 360 kinect 开发应用程序的语言
- go - 如何使用字符串作为参数从 Go 调用 Rust 函数?
- python - 将二维点云双线性加权到网格上的最快方法
- c# - 无法使用 Unity 将 android 客户端连接到同一 LAN 上的服务器
- r - 在R中的两个数据框列表上应用一个函数
- javascript - 根据单选按钮输出更改图像输出
- c++ - 具有模板构造函数特化的模板类,用于初始化模板化基类
- java - 使用 GroupLayout 时出现 InvalidateStateException
- angular - 如何在 ng for 循环中动态创建引导行和列
- r - sapply 返回向量的第一个元素的重复实例,而不是由 R 中的自定义函数计算的所有元素