2

iOSで実行されるPhonegap/Cordovaアプリがあります。データをHTML5localStorageに保存します。

(iCloudを使用して)localStorageデータを他のiOSデバイス、さらにはOSXと同期できるかどうかを調べようとしています。

私が見ることができることから、iOSではlocalStorageは実際にはSQLiteデータベースとして実装されており、(Phonegap / Cordovaを使用している場合)アプリのDocumentsディレクトリに書き込まれます。

Documents / Backups / localstorage.appdata.db

また、iCloudにデータを保存する主な方法は3つあることも理解しています。

  • キー/値ストレージ
  • UIDocument / NSDocument
  • コアデータ

保存するデータが1MBを超えているため、Key / Value iCloudストレージ方式を使用できないことはわかっています。この方式では、アプリごとに1MBの制限があります。

この質問は、UIDocumentメソッドについて話していると思います。そして、そのメソッドを使用してSQLiteデータベースファイルをiCloudに保存できるかどうかを尋ねます。データベースが破損する可能性があるため、答えはノーです。

つまり、これは本当にCoreDataメソッドを残します。

だから私の質問は-これはうまくいくでしょうか?Core Dataを使用してlocalStorage.dbファイルをiCloudに同期できますか?

私はCoreDataを使用したことがなく、それについてあまり知りません。それが可能かどうか、あるいは私が理解していない何かが他にあるかどうか、私はただ疑問に思っています。

iOSデバイスまたはOSX間でlocalStorageデータを同期する他の方法はありますか?

4

1 に答える 1

1

残念ながら、答えはノーのようです。コアデータはHTML5localStorageでは使用できません

Core Dataは、CoreDataで作成されたデータベース以外のSQLiteデータベースでは使用できません。しようとすると、XCodeで次のエラーが発生します。

SQLite error code:1, 'no such table: Z_METADATA'

これは、CoreDataのドキュメントで説明されています。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFAQ.html#//apple_ref/doc/uid/TP40001802-SW2

Core Dataは永続ストアタイプの1つとしてSQLiteをサポートしていますが、データベース形式はプライベートです。ネイティブSQLiteAPIを使用してSQLiteデータベースを作成し、それをCore Dataで直接使用することはできません(ネイティブSQLiteAPIを使用して既存のCoreData SQLiteストアを操作することもできません)。

私はまだこの問題を解決したいと思います。localStorageAPIをミラーリングするJavascriptAPIを作成することを考えています。これは、Objective-cコードを呼び出し、その変更をCoreDataデータベースに効果的に書き込むことができるphonegapプラグインになります。これで、CoreDataデータベースをiCloudに同期できるようになります。

それがうまくいけば、私は戻ってきてこの答えを更新します。

于 2012-11-10T14:16:45.977 に答える