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