0

私はiOSプログラミングに不慣れで、プロジェクトが進行中であり、それに伴ってiOSの新機能を常に学び、それがCoreDataにもたらされました。基本的なチュートリアルとその説明を読みました。しかし悲しいことに、彼らは複雑なデータベースの作成をうまくカバーしていませんでした。私の目標は、サーバーから約20MBのXMLファイルであるデータファイルをダウンロードするアプリケーションを作成することです。そして、ユーザーが対話できるように、それらからアプリのCoreDataデータベースにデータをロードします。

構築しようとしているスキーマを説明しようと思います

各ファイルは、タイプAのエンティティとしてデータベースにロードされます。各エンティティAには、いくつかのプロパティとエンティティBの配列があります。(1対多の関係)各エンティティBには、いくつかのプロパティとエンティティCの配列があります(1対多の関係)。 )。

私のXML構造は次のようなものです

<a>
 <set of b's>
  <b1>
   <set of c's>
    <c1>
    <c2>
    ...
    <cn>
   </set of c's>
  </b1>
  <b2>
  ....
  <bn>
 </set of b's>
</a>

エンティティAは単にインポートされたさまざまなファイルを表すため、サーバー上で使用可能なデータファイルのリストを作成するときに作成されます。次に、ファイルをダウンロードして解析し、そのデータをデータベースにロードする予定です。パーサーを実行すると、最初にエンティティBの作成に必要なすべてのデータを取得し、次にエンティティCのデータを保持する辞書の配列を作成するか、エンティティをBのセットに挿入できます。

問題が発生しているのは、エンティティをMOCに挿入する方法と保存する方法です。つまり、すべての種類のエンティティに同じMOCを使用して、変更を保存する必要がありますか?または、たとえば、「B」をAのMOCに挿入し、次に「C」をBのMOCに挿入してから、最初にBのMOCに変更を保存し、次にAのMOCに保存する必要がありますか?

私のパーサーはデータをチャンクで読み取るので、現在のチャンクからすべてのデータを追加して保存し、次のチャンクの読み取りを開始できることを通知するイベントが必要です。

私はそこでどんな助けにも感謝します。

4

2 に答える 2

1

1 つの MOC のみを使用し、これを渡し、それを使用してすべてを実行します。どこでも保存すると、すべてが一度に影響を受けます。

また、ここで Core Data を使用している理由を確認することもできます。Core Data は実際のオブジェクトには便利ですが、それが純粋に保存したいデータである場合、Core Data には多くの制限があり、考えている場合には予​​期しない可能性があります。それをSQLデータベースとして。

-

データをオブジェクトにロードすることについて。これらのA、B、Cオブジェクトを任意の順序で作成し、プロパティとそれらの間の関連付けを設定するか、後で行うことができます。これは非常に柔軟です。それらを他のObjective-Cオブジェクトと考えてください。

于 2012-05-25T15:34:52.687 に答える
0

Core Data は非常に強力なフレームワークであり、すべてのキャッシング、データの整合性のための検証メカニズム、および最適化が自動的に行われます。独自のモデルをゼロから作成した場合に自分で実装する必要があるもの。

ただし、これはリレーショナル データベースではなく、間違いなく SQL ではありません。はい、おそらくバッキング ストアとして SQLite を使用するでしょうが、SQL ステートメントを直接記述することはできません。ほとんどの場合、とにかくする必要はありません。

データベースに大きなデータ ファイルを保存することになると、パフォーマンスを考慮すると推奨されません。Apple は、ファイルへの URL をデータベースに保存し、データをドキュメント ディレクトリにファイルとして保存することを推奨しています。さらにそれを促進するために、コア データ エンティティ属性への「ショートカット」を導入して、データを外部参照として自動的に保存しました。

使用モデルは単純です。MOC はスクラッチパッドと考えてください。作成するときは、その時点で永続ストア (データベース) で利用可能だったすべてのデータから始めます。次に、新しいデータを挿入し、既存のデータを変更して削除します。MOC を保存するたびに、データは永続ストアに転送されます。または、変更を保存したくない場合は、破棄してください。また、元に戻す管理もサポートしています。

于 2012-05-27T15:50:49.903 に答える