私はその記事を書いたティム・オリバーです。 :)
コアデータからレルムに移動したとき、自分のアプリ(その記事の元になっている)で、私はきれいな休憩を取った。私が保存していたすべてのデータは、アプリケーション内のドキュメントファイルによって派生したキャッシュされたメタデータだけだったので、ディスク上の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"];
}
、あなたはまだ前のように自分のコアデータオブジェクト内のデータにアクセスすることができるはずですが、あなたは今、レルムの実際のクラスを使用して自由です。
残念ながら、コメントに記載されているように、これは、コアデータストアを開いてデータを取得できるようにするために、ある程度のコアデータコードを保持する必要があることを意味します。
しかし、理想的には、ユーザーのデータがまだレルムにコピーされていないことを検出したときに初めて実行する必要がある、単一の「マイグレータ」クラスにこのコードをすべて含めることができます。そして、十分な時間が経過したら、それを完全に落とすことを検討することができます。
出典
2017-06-16 22:40:07
TiM
私が理解することは、一定期間コアデータを残しておき、ユーザーのデータを取得してレルムに転送することです。後であなたはcoredataを完全に削除することができます。 coredataからデータを取得する方法については、多くのチュートリアルがあります。 –
それはそれを行うための1つの提案された方法です。別の方法はクリーンブレークメソッドです。私は、生のNSManagedObjectsだけを使用しているときにデータを適切に変換する方法を調べることを試みています。コアデータ全体のスタックを設定する必要があるかどうかを理解するためです。 – SAHM