Swift: слесарь не обновляет данные - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь обновить счет игры в связке ключей, используя популярную библиотеку: Слесарь .

В моем Initial ViewController viewDidLoad() у меня есть этот код, чтобы изначально установить значение на: 0

do {
    try Locksmith.saveData(data:["score" : 0], forUserAccount: "some_unique_game_name")
} catch {
    print("Error")
}

Во втором ViewController я инициализировал элемент цепочки для ключей сверху, как показано ниже:

let keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")

, а затем в функции для получения результата, который у меня есть.этот код:

NSLog("Score is: \(self.keychain_data!["score"])").

Это возвращает в консоли:

Счет: 0

Теперь у меня есть другая функция, которая устанавливает игруоценка примерно так:

 func updateScor(to: score) {
     NSlog("score is: \(score)")
      do {
         try Locksmith.updateData(data:["score" : score], forUserAccount: "some_unique_game_name")
     } catch {
         print("Error")
    }
     NSlog("saved score is: \(score)")
 }

Что дает мне в журнале:

Оценка: 9999

Сохраненная оценка: 9999

Теперь, когда я снова играю в игру, значение счета все еще устанавливается как:

Счет равен: 0

(Это без возврата к исходномуконтроллер представления, который устанавливает его в 0).

Это должно быть: 9999

Есть идеи?

1 Ответ

0 голосов
/ 20 сентября 2018

Кажется, вы пытаетесь распечатать из старого значения.

После обновления данных вы должны получить данные из keyChains, чтобы получить последнюю копию оттуда.

Ваш код должен быть следующим образом

1) Установите счет на 0 в viewDidLoad()

2) Получите kechain_data и напечатайте, вы увидите 0

var keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")
NSLog("Score is: \(self.keychain_data!["score"])")

3) установите ваш счет с помощью updateScor(to: 9999)

4) Снова получите keychain_data и попробуйте NSLog

keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")
NSLog("Score is: \(self.keychain_data!["score"])")

Надеюсь, это поможет!

...