UIManagedDocumentを使用して新しいアプリを作成しました。私のデバイスではすべてが正常ですが、他のデバイスで問題があるため、多くの悪い評価を得ました:(多くの読み取りとテストの後、従来のCoreDataスタックに戻ることにしました。しかし最高のものは何ですかすでにアプリストアにあるアプリでこれを行う方法は?このアップデートをビルドするにはどうすればよいですか?どうすればよいですか?
ありがとう、ステファン
UIManagedDocumentの問題を特定し、解決する方がよいと思います。
ただし、単純なMOCに行きたい場合は、心配することがいくつかあります。最大の点は、UIMDがファイルパッケージに保存することです。オプションによっては、変更ログについて心配する必要がある場合があります。
結局、単一のsqliteファイルが必要で、混乱の可能性を減らしたい場合は、UIManagedDocumentを開き、各オブジェクトをフェッチして、新しいMOCの単一のsqliteファイルに複製するクラスがあります。
これで、別のオブジェクトモデルは必要ないため、移行の問題は発生しません。
次に、UIManagedDocumentを保持するファイルパッケージを削除し、単一ファイルのsqliteストアのみを使用します。
基本的に、起動時にUIManagedDocumentを開こうとします。開いたら、すべてのオブジェクトをロードして、新しいデータベースにコピーします。次に、それを削除します。
それから、あなたは行ってもいいはずです。
ただし、すべてのデータベースIOがメインUIスレッドで発生しているため、UIの遅延が発生する可能性があることに注意してください。これを回避するには、別のMOCを使用し、通常のCOreData通知メカニズムを介して変更を調整する必要がある場合があります。その上にはたくさんのドキュメント、例、チュートリアルがあります。
編集
ご回答有難うございます。これらの問題に関する私の問題は、それらを再現できないことです。すべてのデバイスが正常に動作しています。しかし、私はこのような問題についてたくさんのメールを受け取りました:-エントリの重複-アプリを停止して再起動した後にデータがありません-アプリが数日間正常に動作し、動作を停止する(新しいデータがない)と言う人もいます。これらはすべて奇妙なことであり、私のデバイスでは起こりません。したがって、私にとって最善の方法は、プレーンなMOCに戻ることです。私のDBは、ユーザーが生成したデータをあまり保持していません。すべてのデータはWebサービスから読み込まれるため、データを削除して新しいDBの使用を開始しても問題ありません。–ウルクマン
エントリが重複しています。これは、一時的/永続的なIDに関連するバグのように聞こえます。それについてはたくさんの投稿があります。これが1つです:getPermanantIDsの後にコアデータがオブジェクトの障害を完全に満たすことができませんでした
保存していません。UIManagedDocumentに適切なAPIを使用していないようです。MOCを直接保存しないようにする必要があります。また、UNDOマネージャーを使用するか、呼び出しupdateChangeCount:
て、保存するダーティデータがあることをUIManagedDocumentに通知する必要があります。繰り返しますが、それについてもたくさんの投稿があります。を検索しupdateChangeCount
ます。
ただし、アプリを最もよく知っているので、プレーンなCoreDataを使用する方が簡単な場合があります。
Webから大量のインポートを行う場合は、別のMOCを使用し、メインのMOCにDidSave通知を監視させて、新しくインポートされたデータで更新することを忘れないでください。
UIManagedDocumentは、特別な種類のドキュメントであるUIDocumentサブクラスであり、CoreDataFrameworkを使用してデータを格納します。つまり、ドキュメントアーキテクチャとコアデータ機能の力を兼ね備えています。
ドキュメントベースのアーキテクチャの詳細については、iOS用のドキュメントベースのアプリプログラミングガイドを参照してください。iOS5セッションビデオを使用して、WWDC2011をiCloudにドキュメントを保存することをお勧めします。また、Stanford CS193P:iPadおよびiPhoneアプリ開発(2011年秋)レクチャー13もお勧めします。
saveToURL:forSaveOperation:completionHandler:を呼び出すと作成されるのは、UIManagedDocumentとUIDocumentの実装の詳細であり、実際に心配したり、依存したりする必要はありません。ただし、現在の実装では、sqliteデータベースファイルを含むフォルダーが作成されています。
いいえ。すべてのエンティティは、より一般的には永続ストアとも呼ばれる単一のデータベースファイルに含まれます。複数の永続ストアを使用することは可能ですが、それらはより高度なユースケースであり、UIManagedDocumentは現在1つを使用しています。
UIManagedDocumentのコンテキストは、基盤となるCoreDataFrameworkのNSManagedObjectContextを参照します。UIManagedDocumentは、実際にはそれらのうちの2つを並行して操作して、IO操作をバックグラウンドスレッドにスピンオフします。コンテキスト自体の性質に関しては、Core DataProgrammingGuideからの引用です。
管理対象オブジェクトのコンテキストは、インテリジェントなスクラッチパッドと考えることができます。永続ストアからオブジェクトをフェッチするときは、一時的なコピーをスクラッチパッドに移動し、そこでオブジェクトグラフ(またはオブジェクトグラフのコレクション)を形成します。その後、これらのオブジェクトを好きなように変更できます。ただし、これらの変更を実際に保存しない限り、永続ストアは変更されません。
ただし、上記で投稿した講義やその他の資料を見て、使用されているテクノロジの概要と、さまざまな状況での開発者としての潜在的な価値を把握することをお勧めします。