2011-11-30 69 views
0

好吧,好像我在問一個noob問題(也許我和我剛剛忽略了重要細節),但我正在尋找一個關於泛型NSManagedObject的「區分」數字/屬性,我可以用作ID號碼(我不能使用名稱B/C我想讓用戶創建具有相同名稱的實體)。如果這不存在,請解釋我將如何重新創建它。我明白,我可以爲此添加一個屬性並增加一個靜態變量(例如:currentId),但如果我這樣做,那麼我必須考慮一個實體被刪除,那麼如何邏輯地將下一個插入的實體放在該索引處,然後返回到最後一個索引。NSManagedObject標識號

回答

0

核心數據沒有自動遞增的ID字段的概念,請記住核心數據是對象圖,而不是數據庫。恰巧一個數據存儲可以由數據庫系統支持,一個完美的例子就是SqlLite。

NSManagedObjectId有點像GUID唯一的URL。如果你想要某種自動遞增的id,你將不得不自己處理這個問題,顯然有很多不同的方法可以解決這個問題。您可以有一個單獨的實體,存儲分配的最後一個ID,並在每次創建新記錄時讀取它,增加值,將其用作新ID並增加存儲值。如果您不想重複使用ID,這將解決您的刪除問題。這裏有明顯的併發問題,您可能需要解決。另一種方法可能是將ID存儲在文件系統中的文件中,或者存儲在NSUserDefaults中,只要確保考慮併發性並且不會意外分配兩次相同的ID。

0

NSManagedObjects有一個objectID方法,但我不相信它們是以任何順序創建的。

個人我只會使用和ID屬性。我不明白的是爲什麼刪除會導致任何問題。身份證只會坐在幕後,沒有任何真正的理由向用戶展示它,對吧?

+0

正確的,這是可行的,用戶永遠看不到它們,但我期待到原始值的限制,如果用戶增加比多(例如說)int類型的實體的最大值(其更有可能發生在我的程序中),那麼錯誤就會開始發生。 – Jaba

+0

然後我的下一個問題是id的目的是什麼?你希望它爲你完成objectID方法沒有的事情? – sosborn

+0

可能將Core Data方案同步到在線數據庫。 – Jaba

0

您似乎可以在您的實體上使用NSNumber標識行,然後只需跟蹤您擁有的對象數量(通過保留var或從存儲中獲取最大值)。

在這裏,我找到了一些可能幫助您實現目標的例子。

link