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

这是一个建议的方式来做到这一点。另一种方法是干净的休息方法。我只是想弄清楚*只使用原始NSManagedObjects时如何正确转换数据。并了解是否需要设置整个Core Data堆栈。 – SAHM

回答

3

我是Tim Oliver写这篇文章的人。 :)

因此,在我自己的应用程序(该文章是基于),当我从核心数据移到境界,我做了一个干净的休息。我所存储的所有数据都是由应用程序中的文档文件导出的缓存元数据,因此我选择仅删除磁盘上的Core Data SQLite文件,然后下次用户只会遇到轻微的不便元数据重新计算并存储在Realm中后打开了应用程序。

如果你的核心数据文件中有数据,那么繁重的工作就是执行从核心数据到Realm的一次性迁移。不建议直接从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; 
} 

但是,一旦你重构你的Book全班分成RLMObject,你仍然可以从你的核心数据存储这样的访问数据:

- (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"]; 
} 

这样,你还是应该能够访问数据在你的核心数据对象像以前一样,但你现在有空使用实际的类领域。

不幸的是,就像你在评论中提到的,这是否意味着你需要不断的核心数据的代码一定量,以便能够打开的核心数据存储和获取数据了它周围。

但是,理想情况下,您应该能够将所有这些代码限制在一个“迁移者”类中,只需要在首次检测到用户数据尚未被复制到Realm时运行。经过足够的时间后,您可以考虑完全放弃它。

+0

完美。我现在明白了。非常感谢Tim。 – SAHM