Я хочу сохранять конфиденциальные данные пользователя в связке ключей постоянно, но проблема в том, что каждый раз, когда я перезапускаю приложение как на симуляторе, так и на устройстве, я теряю все данные. Согласно моему пониманию, данные цепочки для ключей должны продолжать жить в системе, если они явно не удалены. Я знаю, как сохранить данные в файл с помощью файлового менеджера, но это не подходит для этого сервиса. Я пытался найти ответ, но не повезло. Я специально ищу «Сохранение данных в связку ключей» и «Сохраняйте эти данные постоянно, чтобы при удалении и повторном запуске данных приложения все еще было». К вашему сведению, я сейчас использую упаковку KeychainAccess (https://github.com/kishikawakatsumi/KeychainAccess).
Пожалуйста, помогите мне сохранить данные с помощью связки ключей постоянно.
Приложение Я работаю над хранением конфиденциальных данных, поэтому считаю, что это должна быть цепочка для ключей, но вы можете предложить любую другую, если это более уместно.
Ниже приведен мой тестовый код для достижения последовательной экономии, но не повезло.
- Это функции цепочки для ключей с оболочкой под названием KeychainAccess
import Foundation
import KeychainAccess
class Retriever {
static let keychain = Keychain(service: "com.cochipcho.KeeperApp")
// store
static func saveToKeychain(data: Data) {
keychain[data: "encoded"] = NSData(data: data) as Data
}
//retrieve
static func loadFromKeychain() -> [String] {
let retrievedData = keychain[data: "encoded"]
let string = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(retrievedData!) as? [String]
return string!
}
}
Это контроллер представления, декларирующий сохранение / получение данных из класса цепочки для ключей.
import UIKit
import KeychainAccess
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
var array = [String]()
//saving into keychain
@IBOutlet weak var textField: UITextField!
@IBAction func buttonTapped(_ sender: Any) {
array.append(textField.text!)
let data = NSKeyedArchiver.archivedData(withRootObject: array)
Retriever.saveToKeychain(data: data)
}
//retrieving from keychain
@IBOutlet weak var label: UILabel!
@IBAction func retrieveButton(_ sender: Any) {
label.text = "\(Retriever.loadFromKeychain())"
print(Retriever.loadFromKeychain())
print(Retriever.keychain[data: "encoded"])
}
}
Ниже в консоли, где сохраняются входные данные, - но все это исчезло после переустановки и повторного запуска приложения на симуляторе.
["1"]
Optional(227 bytes)
["1", "2"]
Optional(235 bytes)
["1", "2"]
Optional(235 bytes)
["1", "2", "3"]
Optional(243 bytes)
["1", "2", "3", "4"]
Optional(251 bytes)
["1", "2", "3", "4", "5"]
Optional(259 bytes)