2017-08-16 37 views
2

Ionic 2存储不适用于ios,但适用于Android。我正在使用这个import { Storage } from '@ionic/storage';在本地存储数据。Ionic 2存储不适用于iOS

我做样品这样

import { Storage } from '@ionic/storage'; 

export class MyApp { 
    constructor(private storage: Storage) { } 

    setData() { 
    // set a key/value 
    storage.set('username', 'johndoe'); 
    } 
    getData() { 
    // get a key/value pair 
    storage.get('username').then((val) => { 
     alert('Your username is', val); 
    }); 
    } 
} 

它完美地在Android上。但是当我尝试在iOS上构建时,它不起作用。数据未显示。关于如何在离子2中存储持久数据的一些建议,可以在Android和iOS平台上完美工作。

回答

1

首先,我没有看到您的主要模块定义,所以我会先谈谈这一点。在你的主应用程序模块,你需要有一个进口的IoinicStorageModule,然后你需要把这个在您的imports部分:

imports:[IonicStorageModule.forRoot({'yourappname'})] 

其次,我没有看到你检查,看看是否存储是准备好了,你或许应该做到这一点:

this.storage.ready() 
    .then(() => { 
     this.storage.set(key, value); 
    }); 

最后,您的本地存储的问题可以很容易地用这个简单的服务解决:

import { Injectable } from '@angular/core'; 
import { Storage } from '@ionic/storage'; 

@Injectable() 
export class LocalStorageService { 
    constructor(private storage: Storage){ 
    } 

    public setValue(key: string, value: string): Promise<boolean> { 
     return this.storage.ready() 
      .then(() => { 
       return this.storage.set(key, value) 
        .catch(() => { 
         return null; 
       }); 
      }); 
     //TODO: Handle storage not being available 
    } 

    public getValue(key: string): Promise<string> { 
     return this.storage.ready() 
      .then(() => { 
       return this.storage.get(key) 
        .catch(() => { 
         return null; 
        }); 
      }); 
     //TODO: Handle storage not being available 
    } 
} 

我用这对每天基础。不要忘记围绕它进行一些单元测试。

+0

我已经有'IoinicStorageModule',所以我直接去了这一点。 无论如何,谢谢你,我会稍后再尝试一下,这段代码是否适用于iOS?你测试了吗? – JSmith

+0

根据docs(https://github.com/ionic-team/ionic-storage)它是跨平台的,并为每个平台选择最佳解决方案。目前我无法访问iOS,但它会在测试之前该应用程序在应用程序商店出去 – MBielski

+1

我已经尝试过,但它在iOS上不起作用 – JSmith

0

如果您安装SQLite插件,那么您在iOS上也不会有任何问题。

这里是SQLite插件。

当本机应用程序上下文中运行,存储将优先使用 SQLite的,因为这是最稳定和最广泛使用的基于文件的 数据库之一,并且避免了一些东西的陷阱类似的localStorage 和索引资料,例如操作系统决定在低空间情况下清除这些数据。

+0

好的,谢谢。我会尝试的。但是我想要@ ionic/storage,因为它很容易使用,它不适用于ios。所以很伤心:( – JSmith

相关问题