2011-12-17 5 views
7

FMDBラッパーVSコアデータ:使いやすいです&?FMDBラッパーVSコアデータ:どちらを使用して維持するのが簡単ですか?

FMDBは非常に古いですが、まだ多くの開発者がこれを使用していますが、Core Dataは新しく3.0およびそれ以降のSDKだけでサポートされているので混乱します。

FMDBは使いやすく、Core Dataもあるとのこともあります。正しい方向に進むために私を助けてください。あなたには、いくつかの特定のプロジェクトの要件を持っている場合を除き、事前に

おかげで

+1

"3.0以降のsdkでのみサポートされています"というコメントに関して、Appleは3.0より古いバージョンのOSを対象とするApp Store用のアプリケーションを受け付けないため、これは問題ではありません。 –

答えて

19

私は多くのプロジェクトで両方を大量に使用しています。

FMDBは非常に簡単です.SQLを知っているのであれば、使用するのもかなり簡単です。しかし、あなたは、データモデルの変更として、アプリのライフサイクルを通じて行う必要があることです。

  1. 変更データモデル、通常はモデルを反映するように変更SQLコード
  2. ベース
  3. ようなもので
  4. 変更データを変更しますモデルの変更を反映するオブジェクト
  5. データベースに遭遇した場合に対応するコードをアプリケーションに追加します。コアデータは、ライフサイクルにもたらす何

はこれです:

  1. データモデルとオブジェクトが同じアクションで変更されている(私はあなたがmogeneratorのようなものを持つデータ・オブジェクトを生成すると仮定し です)。
  2. データモデルの視覚化が容易になりました。
  3. 逆の関係について考えさせることで、データモデルを簡単にトラバースすることを奨励します。
  4. DBを一から再構築することなく、単純なモデル の変更を移行するには、しばしば自動移行で十分です。
  5. コアデータは、NSManagedDocumentを介したiCloud統合を提供します。

コアデータはを通してあなたをされますことを地獄:削除されたオブジェクト のプロパティのいずれかのアクセスは例外を殺すプログラムをスローするため

  1. 削除は、吸います。
  2. コアデータは、 を複数のスレッドで正しく動作させるため、バックグラウンドスレッドのデータアクセスが失敗します。 例では、1つのスレッドのコンテキストから取得したデータオブジェクトを使用できません。 そんなに単純
  3. ...との仕事のため バックグラウンドスレッドにオブジェクトを渡すためにあなたのデータの周囲そんなに魔法の旋回は、物事がうまく を行くとき、それは に何をすべきかを把握しようひどくイライラになることがあります。
  4. コアデータは、例外をスローした間違ったスレッド、例外をスローする検証、または単純な変更のように思えるものの後に消える全体モデルがすべての可能性を使用して、削除されたオブジェクトのようなものがひどく壊れやすいようです。

だから私は何を勧めますか?デモクラシーについての古い引用を言い換えると、Core Dataは他のすべてを除いて最悪のデータ永続システムです。 Core Dataがあなたの人生にもたらす苦痛と苦痛の新しい定義があっても、FMDBやその他のデータ永続化レイヤーよりも作業が簡単で作業が簡単です。

FMDBはより簡単で、OKであれば変更やデータモデルの定義に多くの時間を割いても問題ありません。しかし、一般的に、私は人々が弾を噛んでコアデータを使用することを推奨します。

いくつかの簡単なヒント:UIが起動し、おそらく アクセスオブジェクトである一方、

  • はコアデータに何も削除しないでください。
  • 可能であれば、データベースを使い捨てとして扱い、 のコンテンツを再構築できるようにしてください。自動転送が機能しない場合でも、ユーザーは アプリを実行できます。
  • コアデータのすべてのアクティビティをメインスレッドに保持し、最後の手段としてバックグラウンドを にします。
  • Core Dataの検証を使用しないでください。また、エンティティの「オプション」ボックスのforayフィールドのチェックを外してはいけません。あなたはむしろどちらかといえば、あなたのモデルに悪い価値のスリップがあり、面白いことを表示したり、アプリが単にクラッシュすることがありますか?
  • mogeneratorを使用して、モデルからデータオブジェクトを生成します。再生成が変更可能なモデルに直接結び付けられたオブジェクトを出力します。オブジェクトのレイヤーは空白で始まりますが、データオブジェクトの周りにカスタムロジックを追加することができ、変更されません下のオブジェクトが再生されたとき。
+0

すばらしい答え! – jrturton

+0

私はCoreDataのマルチスレッドサポートがまったくうまくいっているとは言いません。書かれたルールに従う必要があります。 http://stackoverflow.com/questions/2138252/ – Yuji

+0

スーパー回答、私はこのサイトの新しいユーザーthatsなぜ私はこの種の答えが受け入れられていない、uはちょうどexlpain非常に詳細にすべてのものを詳細。非常にありがとうございます – freelancer

0

、私はコアデータを使用します。 Appleは絶えず改善しており、iPhone用に最適化しています。

+0

答えに感謝、私はまた、コアデータを使用することが良いと感じています。 – freelancer

0

FMDBラッパーのセットアップが簡単です(FireFoxプラグインSQLitemanagerを使用してsqliteデータベースにデータを追加するか、別のSQLITE MANAGERを使用してデータベースにデータを追加するだけで簡単にデバッグできます)あなたのデータベースで何が変わっているか)、理解しやすく、学びやすく、ポートを簡単に(ウェブやAndroidへ)。コアデータは、設計が不適切で、実装が不十分で、文書化されていない超直感的な巨大なクルーである。

+1

答えにFMDBを設定するには、* how *の例を追加してください。これは今のコメントのように感じます。 – Adriaan

関連する問題