【问题标题】:Cordova iOS losing storage on app shut downCordova iOS 在应用程序关闭时丢失存储空间
【发布时间】:2017-02-22 00:50:55
【问题描述】:

正在开发适用于 iOS 和 android 的 cordova 应用程序。测试一些新功能时,我注意到在我通过 xcode 停止应用程序或在手机的多任务视图中关闭它之后,我的 localStorage 数据没有保留。认为这是因为 localStorage 不一定是永久的,我转而使用 PouchDB,它通过 indexdb/websql 存储它。我也遇到了同样的问题。

我正在使用 WKWebview 插件,所以我不知道这是否是原因。我已经在我的笔记本电脑上测试了 pouchdb 在 chrome 中的使用,我遇到的问题为零。

编辑

在安卓上测试过,同样的问题。强制退出应用会清除 indexdb 数据。

【问题讨论】:

    标签: javascript ios cordova


    【解决方案1】:

    不是一个真正的答案,但我最终解决了这个问题。我没有保存到 localstorage 或 websql,而是使用文件插件编写了一个 JSON 文件。

    function getFileEntry() {
      return new Promise((resolve, reject) => {
        // 1mb
        window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 1024 * 1024, (fs) => {
          fs.root.getFile('settings.json', { create: true, exclusive: false }, (fileEntry) => {
            resolve(fileEntry);
          }, (e) => {
            console.log(`error reading file ${fs.root.nativeURL}settings.json`);
            reject(e);
          });
        }, (e) => {
          console.log('error requesting persistent FS');
          reject(e);
        });
      });
    }
    
    export function fileApiAvailable() {
      return window.cordova && window.cordova.file;
    }
    
    export function readFile() {
      return getFileEntry().then((fileEntry) => {
        return new Promise((resolve, reject) => {
          fileEntry.file((file) => {
            const reader = new FileReader();
            reader.onloadend = function() {
              if (this.result) {
                resolve(JSON.parse(this.result));
              } else {
                resolve(null);
              }
            };
    
            reader.readAsText(file);
          }, (e) => {
            console.log('issue reading the file');
            reject(e);
          });
        });
      });
    }
    
    export function saveSettingsToFile(settings) {
      if (!fileApiAvailable()) {
        return Promise.resolve();
      }
    
      return getFileEntry().then((fileEntry) => {
        return new Promise((resolve, reject) => {
          fileEntry.createWriter((fileWriter) => {
            fileWriter.onwriteend = () => {
              resolve();
            };
            fileWriter.onerror = (e) => {
              reject(e);
            };
            fileWriter.write(JSON.stringify(settings));
          });
        });
      });
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-03
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多