2012-02-08 55 views
9

我正在插入一個新的文件夾實體到我的模型對象上下文(MOC),這是主MOC的一個孩子。在保存之前,[[newFolder objectID] isTemporaryId]返回YES。當我先保存我的MOC,然後保存主MOC並詢問[[newFolder objectID] isTemporaryId]時,它再次顯示YES。我期望它現在是一個持久對象,事實上,如果我詢問SQLite文件,它包含新文件夾。對於我正在運行的應用程序的整個時間,它會說是。在我退出並重新啓動之前,因此從商店中加載對象,它是否說不。什麼時候一個對象得到一個不是臨時的對象ID?

我一直以爲一個NSManagedObject從一個臨時對象改變爲一個存儲對象,當它被保存時不再有一個臨時對象ID。什麼時候一個對象得到一個不是臨時的objectID?

乾杯

尼克兒童環境

+1

我應該補充說我不能使用「NSManagedObject * obj = [MOC existingObjectWithID:oid error:&error];」其中oid是新插入和保存的文件夾的(仍然是臨時的)ObjectID – niklassaers 2012-02-08 11:14:03

+0

到目前爲止,解決此問題的唯一有效方法是通過[self.masterMOC reset]跟蹤保存到磁盤; – niklassaers 2012-02-08 15:18:43

回答

13

對象,直到對象被刷新不被父環境的變化改變。也許在保存父上下文之後刷新對象將會起作用。

如果不行,總會有-[NSManagedObjectContext obtainPermanentIDsForObjects:error:]

+2

這是改變的孩子,而不是父母。然後,先保存孩子,然後保存父母。謝謝使用obtainPermanentIDsForObjects的技巧。但我仍然非常想知道爲什麼對象ID不刷新。 – niklassaers 2012-02-08 14:28:53

+0

我明白 - 你改變對象,保存子上下文,然後保存父上下文。保存子上下文時,它不會獲得永久ID;我推理說,當你保存父上下文時,只會影響父上下文,所以子上下文看不到永久ID。如果爲true,刷新對象應強制子上下文從父項獲取新ID。 – 2012-02-09 00:21:16

+3

你會推薦什麼方式來刷新對象?當使用objectID的臨時ID時,existingObjectWithID:error:返回一個錯誤,而objectWithID:給出具有相同臨時ID的相同對象。即使在孩子和父母都得救之後。重置父母MOC解決這個問題,但這是一個非常昂貴的決議。 – niklassaers 2012-02-10 10:39:50

相關問題