Обновить URLSession после создания новых данных в базе данных - PullRequest
0 голосов
/ 02 апреля 2020

Я использую следующее:

  • Apollo iOS

  • База данных Neo4j (с плагином GraphQL)

  • GraphQL


Класс Singleton для подключения

Мой код ниже предназначен для подключения к конечной точке 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))
        )
    }()
}

Когда я создаю данные в своей базе данных через мое приложение, это прекрасно работает, однако, если я затем запрашиваю базу данных, чтобы вернуть все данные, вновь созданные данные не найдены. Данные находятся в базе данных, потому что я вижу их в браузере, а также, если я перезапускаю свое приложение и затем запускаю точно такой же код, чтобы вернуть все данные; он возвращает его.

Другая вещь, которую я попытался сделать, - запустить два экземпляра моего приложения рядом в симуляторе. Оба приложения имеют одинаковые функции и могут импортировать / экспортировать данные. Когда я создаю новые данные в одном экземпляре, они успешно создаются в базе данных, однако после импорта данных в другом экземпляре приложения ничего не возвращается (оба приложения запускаются одновременно).

My Код импорта

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

Единственное, о чем я могу думать, это то, что сеанс не обновляется при создании новых данных в базе данных. Причина, по которой я это чувствую, заключается в том, что, если я перезапущу приложение и запустю свою функцию импорта, она фактически вернет все новые данные. Мне нужно соединение для обновления при создании новых данных, есть ли способ обновить sh соединение при создании данных?

1 Ответ

0 голосов
/ 02 апреля 2020

Я нашел исправление, которое до сих пор работало для меня:

apollo.clearCache()

Я использую это, прежде чем выполнить запрос к базе данных, и пока он собрал все правильные данные. Моя проблема заключалась в том, что когда я экспортировал данные в базу данных, а затем попытался импортировать их (или прочитать) непосредственно после того, как они никогда ничего не возвращали или не возвращали данные, которые уже существовали в системе.

...