2012-03-06 14 views
0

我在我的應用程序中使用CoreData,我有一組「卡」實體。玩家可以在他的套牌中擁有多張同一張牌(它仍然是從數據庫中拉出的同一張牌,但是會向陣列添加兩次)。複製NSManagedObject

當我想修改其中一張重複卡片的某個方面時,會發生我的問題。它們都是分類的NSManagedObjects,它們有一些自定義屬性(不保存到數據庫中)。例如,當我在陣列中的一張卡上設置其中一個自定義屬性時,它也會在陣列中的其他同一張卡上發生更改,因爲entityForName:inManagedObjectContext:返回相同的對象,並且不會加載新的對象。

基本上我需要的是每次調用entityForName:inManagedObjectContext:我得到一個同一個實體的新實例,這樣當我修改一個自定義屬性時,它不會在另一箇中修改。如果已經創建了實體,但是它不起作用,我已經嘗試使用[實體複製]。

非常感謝您的幫助!

回答

0

核心數據是一個持久存儲,而不是數據庫。因此,detre確保你得到完全相同的對象,無論你多少次要求它。那些不是來自數據庫的快照,因爲如果您編寫了一些自定義SQL代碼,它們可能就是實際的活動對象。

考慮到這一點,你需要做的是配置你的核心數據模式以匹配你的邏輯模式 - 我想你會有,比如CardInstance,與Card有一對多的關係,當你從卡片中拉出一張卡片時,你會創建CardInstances,或者編寫一些代碼來將讀取的卡片讀取到快照對象中,就像你用SQL或其他方式手動操作一樣。