在数据库内部创建新数据后更新URLSession

时间:2020-04-02 10:49:47

标签: swift neo4j graphql apollo

我正在使用以下内容:

  • Apollo iOS

  • Neo4j数据库(带有GraphQL插件)

  • GraphQL


用于连接的单个类

下面的代码是连接到GraphQL端点的,该端点恰好是我的Neo4j数据库。

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)
    }
}

我唯一能想到的是,在数据库中创建新数据时,会话没有更新。我之所以这样认为,是因为如果我重新启动该应用程序并运行导入功能,则它实际上会返回所有新数据。创建新数据时需要更新连接,有什么方法可以在创建数据时刷新连接吗?

1 个答案:

答案 0 :(得分:0)

我找到了目前为止对我有用的修复程序:

apollo.clearCache()

在对数据库运行查询之前,我正在使用它,到目前为止,它已经提取了所有正确的数据。我的问题是,当我将数据导出到数据库,然后在它从未返回任何东西或返回系统中已经存在的数据之后立即尝试导入(或读取)它时。