mBaaSはインターネット接続ありきのサービスです。ネットワークが不安定だったり、オフラインだと多くの機能が利用できません。しかしユーザはそんなことには構わずデータを取得したり、保存したいと考えるでしょう。
そこで使ってみたいのがsaveEventuallyメソッドです。
iOSでの実装
データストアに保存するデモコードです。
let memo = NCMBObject.init(className: "Memo") memo?.setObject("Test!", forKey: "Memo") memo?.saveEventually({ error in if (error != nil) { print(error) } else { // 保存後の処理 print("保存完了") print(memo) } });
もしオフラインの状態で saveInBackground を使うと以下のようなエラーが返ってきます。
The Internet connection appears to be offline.
そこで saveInBackground を saveEventually に変更して実行します。そうするとエラーはなく、オブジェクトは以下のようになります。
保存完了 Optional({ "acl" : { }, "Memo" : "Test!" })
内容を見て分かる通り、objectIdなどは入っていません。
注意点
objectIdがないので、それをキーにして処理を行っている場合には変更が必要です。オンラインになるとデータがアップロードされるはずなのですが、シミュレータではうまくイベントがキックされない場合があります。実機で確認してみてください。
なおsaveEventuallyはiOSのみの機能で、Android/JavaScript/Unityでは実装されていません。
まとめ
アプリにおいてオフライン対応は大事な要件になります。ネットワークがダメだったらエラーとしてしまうのも手ですし、saveEventuallyを使ってキューに保存するという手もありでしょう。アプリの要件に応じて最適な方を選択してください。