1

託管對象是否可以與未選中的「可選」建立關係?具有強制關係的NSManagedObject

如果是這樣,我怎麼能插入它沒有validateForInsert:失敗? 我希望關係是強制性的,但在插入它之前我無法在當前對象和另一個對象之間建立連接,因爲我要連接的兩個對象位於不同的上下文中。

具體示例: 我通常有一個MOC。假設我在上下文中保存了一個Person
現在我想創建一個新的,所以我實例化一個Person而不是插入到上下文中。當用戶從某個表視圖中選擇一個兄弟並設置'兄弟'屬性時,反向關係會嘗試建立MOC中保存的對象與MOC中不存在的對象之間的連接,這會導致應用程序崩潰。
我的問題:如果'兄弟'關係不是是可選的,我可以創建並插入一個新的人嗎?

+0

請說明如何初始化您引用的每個NSManagedObjects。您應該使用initWithEntity:insertIntoManagedObjectContext:方法初始化,該方法立即將該對象與託管對象上下文相關聯(但不會將其保存到持久性存儲) – Jim 2012-01-30 20:50:59

+0

這就是我所做的。儘管檢查我的答案,我已經解決了這個問題。謝謝你的幫助。 – 2012-02-01 13:17:31

回答

0

真是一個愚蠢的問題。

當然,您可以在上下文中插入對象而不會導致錯誤。然後您可以設置(強制性)關係。
只有在實際嘗試保存上下文時纔會驗證關係和屬性。

然而,在我的應用程序中,我沒有插入實體,直到'NewItemVC'結束。我在正在創建的對象上調用了-validateForInsert:以檢查它是否有效啓用/禁用完成按鈕。
因爲我不能在沒有插入的情況下建立強制關係,這不是一個好主意,我必須想出新的東西。

0

我的理解是,上下文用於共享對持久存儲的變更的共同意識。您可以有兩個上下文引用同一個持久性存儲。因此,例如,如果您有NSFetchedResultsController,則可以使其接收管理對象上下文已更改的通知。您可能擁有兩個持久性存儲,以便可以限制關於某些更改的通知。 (一個簡單的,也許不太現實的例子是一個上下文中的搜索結果列表,但另一個上下文中的收藏夾列表。你的應用程序可以通過將結果列表中的一個項目變成最愛,來改變它。通知轉到收藏夾列表及其獲取的結果控制器所指的上下文,假設結果列表不受影響,所以兩個上下文在這裏是有意義的,但兩個上下文都指向相同的持久存儲區。)

更重要的是,如果兩個上下文中引用的對象包含在同一個持久性存儲中,則它們仍具有完整的所有關係以及管理這些關係的過程。

所以我不明白你的陳述,對象是在不同的背景下。你可以說得更詳細點嗎?

+0

再次檢查我的問題,我添加了一個例子。 – 2012-01-30 20:17:35