2017-08-16 59 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