2012-09-07 68 views
10

在iOS應用程序中,我想使用NSPersistentStoreCoordinatorNSIncrementalStore子類,用於從REST API中獲取數據,但也使用SQLite存儲來保存到磁盤。如果我將兩種類型的持久性存儲添加到協調器,則在我的託管對象上下文中調用​​不起作用。如果我只添加一個持久存儲,而不是我的NSIcrementalStore子類的類型,則保存按預期工作。NSPersistentStoreCoordinator有兩種類型的持久性存儲?

有什麼辦法可以實現這個功能嗎?

回答

10

根據我的經驗,最佳解決方案是擁有多個託管對象上下文,每個託管對象上下文都有自己的模型。

但是,有一種方式來完成你想要什麼:

// create the store coordinator 
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] init]; 
// create the first store 
NSPersistentStore *firstStore = [storeCoordinator addPersistentStoreWithType: NSIncrementalStore configuration:nil URL:urlToFirstStore options:optionsForFirstStore error:&error]; 
// now create the second one 
NSPersistentStore *secondStore = [storeCoordinator addPersistentStoreWithType:NSSQLiteStore configuration:nil URL:urlToSecondStore options:optionsForSecondStore error:&error]; 

// Now you have two stores and one context 
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; 
[context setPersistentStoreCoordinator:storeCoordinator]; 

// and you can assign your entities to different stores like this 
NSManagedObject *someObject = [[NSManagedObject alloc] initWithEntity:someEntity insertIntoManagedObjectContext:context]; 
// here the relevant part 
[context assignObject:someObject toPersistentStore:firstStore]; // or secondStore .. 

您也應該檢查這些鏈接以獲取有關核心數據是如何工作的一個更好的主意:

Core Data Programming Guide - Persistent Store Coordinator

SO: Two persistent stores for one managed object context - possible?

SO: Can two managed object context share one single persistent store coordinator?

而且通過TechZen在有關配置的第二個鏈接查看評論和閱讀它在這裏:

Core Data Programming Guide - Configurations

,這裏是一個很好的教程,以管理兩個對象上下文:

Multiple Managed Object Contexts with Core Data

+0

謝謝,由於這些資源,我已經正確設置了一切。然而,仍然有一個問題:我有多個託管對象上下文,但有一個持久存儲協調器和兩個持久存儲。當我對主管理對象上下文執行獲取請求時,我只希望將其與SQLite持久性存儲關聯,而不是使用我的NSIncrementalStore子類。我如何實現這一目標? –

+0

看起來像是' - [NSFetchRequest setAffectedStores:]'。 –

+0

@JordanKay不客氣。對不起,我沒有回答你提出的關於提取請求的問題,它在這裏陽光明媚,很熱,所以我參加了派對。但看起來你是對的! [NSFetchRequest setAffectedStores:]它是。 – iska

相關問題