     @IBOutlet weak var fetchTextField: UITextField!
     @IBOutlet weak var deleteTextField: UITextField!
     
-    var storeManager: KVStoreManager!
+    var storeManager: KVStoreManager<String>!
     
     override func viewDidLoad() {
         super.viewDidLoad()

        }
        
        do {
         try storeManager.insert(value: valueUnwrapped.data(using: String.Encoding.utf8)!, for: keyUnwrapped)
        showAlert(withTitle: "Success", buttonTitle: "OK", message: "Successfully added key value pair in database", okAction: nil)
            

            return
        }
        
        let data = storeManager[keyUnwrapped] //storeManager.getValue(for: keyUnwrapped)
        guard let unwrappedData = data, let fetchedString = String(data: unwrappedData, encoding: .utf8) else {
            showAlert(withTitle: "Error", buttonTitle: "OK", message: "Failed to get value for \(keyUnwrapped)", okAction: nil)
            return
        }
        
        showAlert(withTitle: "Success", buttonTitle: "OK", message: "Successfully Fetched Value. Your Key: \(keyUnwrapped), Value: \(fetchedString)", okAction: nil)
        
    }
    
    @IBAction func tappedDelete(_ sender: UIButton) {
        let key = deleteTextField.text
        guard let keyUnwrapped = key, keyUnwrapped.characters.count > 0 else {
            showAlert(withTitle: "Error", buttonTitle: "OK", message: "Key is empty. Key should have atleast one character", okAction: nil)
            return
