2011-04-19 53 views
0

我與CoreData相關的問題掙扎了現在,而選擇實體。 前兩個選項卡是顯示來自我的CoreData的內容的視圖控制器,第三個選項卡具有UIPickerView,我可以在其中選擇數據。 第三個和第二個視圖控制器應該根據UIPickerView選擇選擇正確的實體。UIPickerView從managedObjectContext

爲了更清楚地說明這一點:在我的managedobjectcontext中,我有16個實體。根據ThirdViewController中的UIPickerView選擇,我想使用相應的實體並更新FirstViewController和SecondViewController。

這應該也是一個持久的解決方案,以便用戶可以退出應用程序,但是應該存儲從UIPickerView中選擇的內容。也許這是NSUserDefaults的東西?

任何幫助將不勝感激!

+0

我不清楚你在問什麼。您是否在問如何將某些內容保存到核心數據中?你問你是否應該使用核心數據而不是用戶默認?你問如何將一個特定的託管對象傳遞給另一個視圖控制器? – TechZen 2011-04-19 13:37:48

+0

哦,我很抱歉造成一些混亂。 我不想保存某些內容到核心數據。我有3個ViewControllers: ViewController#1:顯示來自核心數據的數據 ViewController#2:顯示來自核心數據的數據 ViewController#3:有一個UIPickerView讓我們的用戶選擇一個實體其核心數據的屬性。 – 2011-04-21 15:04:38

+0

我想要的是以下內容:當用戶從ViewController#3中選擇一個實體時,應該持久地存儲這些信息,以便ViewController#1和#2始終知道(即使用戶退出應用程序 - 無背景!),他們應該獲得哪些實體的數據。 我明確了嗎? – 2011-04-21 15:09:10

回答

0

我不清楚您是否需要保存實體名稱或特定的託管對象,但在這兩種情況下解決方案都是相同的:您需要將參考存儲在NSUserDefaults中。

要將實體存儲在用戶默認值中,您只需將實體名稱保存爲字符串。因此,像:

[[NSUserDefaults standardUserDefaults] setValue:entityNameString forKey:@"currentlySelectedEntity"]; 

...並找回它:如果您需要保存到特定管理對象的引用

NSString *currentEntity=[[[NSUserDefaults standardUserDefaults] valueForKey:@"currentlySelectedEntity"]; 

,您需要保存的管理對象ID 已保存對象。節省是非常重要的。在保存創建對象的上下文之前,對象ID只有一個臨時值,保存後會更改。如果使用臨時值,則對象的任何引用都將丟失。

保存對象ID:

NSManagedObject *mo=[NSEntityDescription insertNewObjectForEntityForName:@"TestEntity" inManagedObjectContext:self.managedObjectContext]; 
    //... save the context 
    NSManagedObjectID *moID=[mo objectID]; 
    NSURL *moIDURI=[moID URIRepresentation]; 
    [[NSUserDefaults standardUserDefaults] setValue:moIDURI forKey:@"currentlySelectedTestObject"]; 

...以檢索它:

NSURL *uri=[[NSUserDefaults standardUserDefaults] valueForKey:@"currentlySelectedTestObject"]; 
    NSManagedObjectID *moID=[self.persistentStoreCoordinator managedObjectIDForURIRepresentation:uri]; 
    NSManagedObject *mo=[self.managedObjectContext objectRegisteredForID:moID]; 

(上面的代碼是未編譯並且可能包含拼寫錯誤,所以不要只是複製和粘貼)

+0

這就是我一直在尋找的!謝謝! – 2011-04-22 09:36:01