私は 6 か月以来、iOS アプリケーション (Swift で作成) で Parse.com を使用しており、多くの理由で Parse ローカル データストアを使用したいと考えています。
- アプリケーションをオフラインで使用可能 (取得可能) にする
- データ使用量を減らす (「更新されていないデータ」を返す多くのクエリ)
- 読み込み時間の短縮 (主にアプリケーションの起動時とネットワークからのすべてのデータの読み込み時)
そのために、アプリケーションから実行するすべてのクエリに対してこれらのシナリオを処理するグローバル関数を作成したいと考えています。
私はすでに関数が何をすべきかについて具体的な考えを持っていますが、技術的にこの関数を書く方法がわかりません:)
シナリオ:
サインアップ/ログイン (チェーン複数クエリ) :
- ネットワークからデータを取得する
- NSUserDefaults の « lastUpdateLocalDatastore » 変数内に日付を保存します
- ローカル データストアにデータを固定する
- ローカル データストアからのデータを表示 —> 戻る & TableView を更新
アプリのロード (複数のクエリのチェーン) :
- ローカル データストアからのデータを表示 —> 戻る & TableView を更新
- ネットワークからデータを取得します (Parse の « lastUpdateDate » は NSUserDefault の « lastUpdateLocalDatastore » よりも新しい)
- ローカル データストアにデータを固定する
- Local Datastore から更新されたデータを表示 —> RETURN & update TableView
トリガー更新 (単純なクエリ) :
- ネットワークからデータを取得します (Parse の « lastUpdateDate » は NSUserDefault の « lastUpdateLocalDatastore » よりも新しい)
- ローカル データストアにデータを固定する
- Local Datastore から更新されたデータを表示 —> RETURN & update TableView
ログアウト :
- ローカル データストアのすべてのデータの固定を解除
- NSUserDefault の « lastUpdate » 値をクリア
機能構造 :
IF ( "First login" -> Local Datastore is empty ) {
Get data from Network
Pin data in Local Datastore
Save « lastUpdateLocalDatastore » in NSUSerDefaults
—> RETURN data in Cache
} ELSE {
IF ( "Launching application" -> Cache is empty ) {
Get data from Local Datastore
—> RETURN data in Cache
} ELSE IF ( "trigger update" ) {
Get data from Network
Pin new data in Local Datastore
Save « lastUpdateLocalDatastore » in NSUSerDefaults
—> RETURN data in Cache
}
}
問題 :
- 複数の (非同期の) 返品を処理する方法
- 複数のクエリを連鎖できる関数を作成する方法 (たとえば、アプリをロードするときに 6 つの異なるクエリからデータを取得する必要がある)