2

私はティム・オリバー(Migrating an App from Core Data to Realm)することで、この記事を読んでいたし、私は限りレルムにコアデータから私のアプリを変換するように見つけることができた最も指導されている次のパラグラフ、出くわした:コアデータからレルムへデータを移行する手順は?

」 Realmに移行したら、Core Dataフレームワークをアプリケーションに再リンクし、未処理のNSManagedObjectオブジェクトを使用してCore Dataからユーザーのデータを取得し、手動でRealmに渡すことができます。あなたのアプリケーションのコードを永久に削除するか、または十分な時間が経過した後に削除するだけです。 "

これは良いアイデアのようです。しかし、私はこれをどうやってやるべきかの一例さえ見つけられませんでした。

既にすべてのCore DataクラスをRealmに変更しているため、これ以上使用することはできません。私は、アプリケーションに利用可能なxcdatamodelファイルがあり、コアデータフレームワークは簡単に元に戻すことができます。永続的ストアコントローラ、managedObjectContextなどの全体をもう一度設定する必要がありますか?

望ましくないが、これは必要に応じて行うことができます。次に、「生の」NSManagedObjectを使用する必要があるので、多対多および一対多関係とその逆を正しくキャプチャする方法を考えれば、わかります。

誰も私にこの方向性を向けることができますか?私はobjective-cを使用していますが、指されるべきものがあれば、Swiftの例の恩恵を受けるでしょう。

+0

私が理解することは、一定期間コアデータを残しておき、ユーザーのデータを取得してレルムに転送することです。後であなたはcoredataを完全に削除することができます。 coredataからデータを取得する方法については、多くのチュートリアルがあります。 –

+0

それはそれを行うための1つの提案された方法です。別の方法はクリーンブレークメソッドです。私は、生のNSManagedObjectsだけを使用しているときにデータを適切に変換する方法を調べることを試みています。コアデータ全体のスタックを設定する必要があるかどうかを理解するためです。 – SAHM

答えて

3

私はその記事を書いたティム・オリバーです。 :)

コアデータからレルムに移動したとき、自分のアプリ(その記事の元になっている)で、私はきれいな休憩を取った。私が保存していたすべてのデータは、アプリケーション内のドキュメントファイルによって派生したキャッシュされたメタデータだけだったので、ディスク上のCore Data SQLiteファイルを単に削除することを選択し、次にユーザが次回に軽い不便さを感じるだけでしたメタデータが再計算されてレルムに格納されると、アプリケーションが開かれました。

コアデータファイルにデータがある場合は、コアデータからレルムへのワンオフ移行を実行することが煩わしいです。 SQLiteファイルから生データに直接アクセスすることは推奨されません。したがって、Core Dataコードを保持し、データのクエリとコピーに使用する唯一の方法があります。私は「生NSManagedObject S」の意味は何

は、コアデータオブジェクトがKVCに準拠しているので、すでにレルムのクラスにあなたのモデルクラスをリファクタリングした場合、あなたが使用してベースNSManagedObjectクラスから直接データにアクセスできるということですKVCの方法は-[NSObject valueForKey:]です。

私はこれをone of the official Apple Core Data sample code projectsで簡単にテストして、まだ動作していることを確認しました。

もともと、コアデータBookオブジェクトからアクセスするデータは、このように見えた:

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { 

    // Configure the cell to show the book's title 
    Book *book = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = book.title; 
} 

しかし、あなたがRLMObjectにあなたBookクラスをリファクタリングしたら、あなたはまだこのようなあなたのコアデータストアからデータにアクセスすることができます。このようにして

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { 

    // Configure the cell to show the book's title 
    NSManagedObject *book = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [book valueForKey:@"title"]; 
} 

、あなたはまだ前のように自分のコアデータオブジェクト内のデータにアクセスすることができるはずですが、あなたは今、レルムの実際のクラスを使用して自由です。

残念ながら、コメントに記載されているように、これは、コアデータストアを開いてデータを取得できるようにするために、ある程度のコアデータコードを保持する必要があることを意味します。

しかし、理想的には、ユーザーのデータがまだレルムにコピーされていないことを検出したときに初めて実行する必要がある、単一の「マイグレータ」クラスにこのコードをすべて含めることができます。そして、十分な時間が経過したら、それを完全に落とすことを検討することができます。

+0

パーフェクト。わかった。本当にありがとうTim。 – SAHM

関連する問題