首页 > 解决方案 > Cordova Native Storage Plugin 在应用程序 iOS 中未定义

问题描述

我已将最新版本的 Cordova Native Storage 插件 ( https://github.com/TheCocoaProject/cordova-plugin-nativestorage ) 安装到我的 Cordova / Nuxt JS 项目中。当我单击一个按钮时,我试图存储一些数据,并在单击另一个按钮时提醒数据:

<template>
  <div class="fill-height has-safe-area-top">
    <v-container>
      <v-layout row pb-2>
        <v-flex>
          <h1>Native storage test</h1>
          <v-btn @click="storeData">Store</v-btn>
          <v-btn @click="getData">Get</v-btn>
        </v-flex>
      </v-layout>
    </v-container>
  </div>
</template>

<script>
export default {
  methods: {

    storeData() {
      NativeStorage.initWithSuiteName("suitename");
      NativeStorage.setItem("reference_to_value", "my value");
    },

    getData() {
      alert(NativeStorage.getItem("reference_to_value"))
    }

  }
}
</script>

当在 Xcode 10 中编译的物理设备上进行测试时,这似乎又回来undefined了。alert()

标签: javascriptioscordovanuxt.js

解决方案


正如我们在文档中看到的,setItem 方法有一个成功和错误回调函数,因此我推断该函数是异步的。

NativeStorage.setItem("reference_to_value",<value>, <success-callback>, <error-callback>);

我认为您在第二个按钮上按得太快了,而第一种方法尚未完成将其变量写入手机的本机存储

尝试这样的事情:

storeData() {
  NativeStorage.initWithSuiteName("suitename");
  NativeStorage.setItem("reference_to_value", "my value", () => {
      alert("SUCCESS");
  }, () => {
      alert("ERROR");
  });
},

在警报未显示时不要触摸任何东西

getItem 也是什么都不返回的“回调”方法。你应该像这样处理这个函数的回调:

getData() {
    NativeStorage.getItem("reference_to_value", (value) => {
        alert(value);
    }, () => {
        alert("ERROR");
    });
}

推荐阅读