我是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时运行。经过足够的时间后,您可以考虑完全放弃它。
来源
2017-06-16 22:40:07
TiM
我的理解是在一段时间内不留下核心数据,并获取用户数据并将其转移到领域。稍后,您可以完全删除coredata。有许多关于如何从coredata获取数据的教程。 –
这是一个建议的方式来做到这一点。另一种方法是干净的休息方法。我只是想弄清楚*只使用原始NSManagedObjects时如何正确转换数据。并了解是否需要设置整个Core Data堆栈。 – SAHM