2016-03-19 3 views
0

私は現時点でアプリケーションを構築しており、CoreDataのコンセプトについて頭を下げようとしています。私はちょうど開発目的のために、ローカルにいくつかのテストデータを使用しています、現在...このリンクからの助言に基づいてiOSのCoreDataを理解するSwift

Apple "Define Your Data Model" Link

のアプリのデータモデルを作成しました。ここで私はその後、ローカルで開発中に使用されるこれらのオブジェクトの一部を初期化してきた私が作成したサンプル・オブジェクト・クラス...

import UIKit 

func ==(lhs: Recipe, rhs: Recipe) -> Bool { 
    return lhs.hashValue == rhs.hashValue 
} 

class Recipe: Hashable { 

dynamic var ID : Int = 0 
dynamic var recipeName: String = "" 
dynamic var recipeDescription:String = "" 
dynamic var servings: Int = 0 
dynamic var cookTime: Double = 0.0 
dynamic var image: String? = "" 

var hashValue : Int { 
    get { 
     return "\(self.ID)".hashValue 
    } 
} 
init?(id: Int, name: String, description: String, servings: Int, cooktime: Double, image: String) { 
    self.ID = id 
    self.recipeName = name 
    self.recipeDescription = description 
    self.servings = servings 
    self.cookTime = cooktime 
    self.image = image 

    if id < 0 || name.isEmpty || description.isEmpty || cookTime < 0 || servings < 0 { 
     return nil 
    } 
} 
} 

であり、それらは正常に動作。

私の質問は、それがCoreDataまたはRealmSwiftなどのストレージを使用する時間が来ると、データモデルのこのタイプは無関係になりますか?...

ですか私はまったく新しいデータモデルを作成しますか(例えばRealmの場合)?このタイプのデータモデルは、DBモデルの1つでうまくいくでしょうか?

最も重要なのは、今のようなデータモデルを構築し、多くのコードリファクタリングの原因となったCoreDataまたはRealmSwiftを組み込むことでしょうか?この場合、フロントエンドの開発を中止し、データモデル全体を構築して前進することをお勧めしますか?

+0

Realmについてはわかりませんが、コアデータでは、Xcodeで管理対象オブジェクトモデルを選択してから、「エディタ - >管理対象オブジェクトサブクラスの作成」に移動します。 Xcodeはエンティティクラスを作成します – Paulw11

+0

私は参照してください。だから、ユーザーがいくつかのデータをローカルに保存したり、ローカルデータにアクセスしたりする場合は、上記のオブジェクトコードのイニシャライザではなく、コアデータを使用します。 –

+0

コアデータを使用している場合は、 'NSManagedObject'を使用してデータを格納する必要があります。あなたは 'NSManagedObject'を直接使用することができ、単に値を設定/取得できますが、Xcodeが作成するサブクラスを使用すると、' myRecipe.servings'と言ってそれをNSManagedObjectにマッピングすることができます。基本的にXcodeは、NSManagedObjectをコアデータに永続化できるようにすることを除いて、あなたが示したクラスに非常に似たクラスを作成します。 – Paulw11

答えて

0

コアデータとレルムは、スキーマを定義する2つの非常に異なるアプローチになります。

コアデータの場合は、Xcodeのデータモデルエディタでモデルを設計する必要があります。このモデルでは、バージョンごとにファイルxcdatamodelが作成されます。 Xcodeの組み込み機能または第三者ツールをmogeneratorとして使用して、NSManagedObjectエンティティクラスを生成することができます。コアデータは、lightweight migrationsでスキーマの異なるバージョン間のマッピングを自動的に推論できますが、これは特定の制限内でのみ機能します。移行ケースがより複雑になる場合は、カスタムマッピングモデルを定義できます。

一般的なRealmとRealmSwiftでは、スキーマ(と移行)をコードで完全に定義しています。クラスはObjectから継承しなければならず、正しく認識され、自動的に永続化できるように、プロパティーconforming to some rulesを定義する必要があります。

しかし、1つの永続性フレームワークを他の永続性フレームワークよりも優先させることは、アプリケーション全体の効果をもたらします。たとえば、Core DataとRealmは、マルチスレッドに関するさまざまな要件を持っています。理論的には、永続性レイヤーを完全にカプセル化し、フロントエンドとプロキシオブジェクトのみを共有する場合、同時にコンポーネントサポート(NSFetchedResultsController/RBQFetchedResultsController)の利点と、永続性フレームワークが提供する便利性を失うことになります。