2013-02-24 59 views
0

我還沒有在文檔/討論中找到明確的「否」,但懷疑無法在運行時以編程方式生成CoreData對象。如何動態生成CoreData對象

我想要做的就像在運行代碼中執行DDL命令(例如「Create Table」,「Drop Table」等),因爲我不知道直到我詢問用戶有多少列表需求,或者他們需要的數據類型。也許他需要多張桌子。

有誰知道這是否可能?將欣賞指向某些東西的指針。 (也會喜歡學習負面的,所以我可以停止想知道。)

如果在CoreData中不可行,這是否會成爲切換到SQLite的原因?

+3

您可以創建一個核心數據「管理對象模型「和」實體描述「(例如,請參閱http://stackoverflow.com/a/13744302/1187415)。但請注意,核心數據是「對象圖管理器」,而不是數據庫(請參閱,例如http://www.cocoawithlove.com/2010/02/differences-between-core-data-and.html)。因此,對於Core Data,您應該考慮對象及其屬性和關係,而不是表格。 – 2013-02-24 11:14:38

+0

我完全同意@MartinR;) – 2013-02-24 11:28:24

+0

非常感謝。我會研究參考。 我也來到http://stackoverflow.com/questions/6379025/customize-core-data-model-at-runtime/6379098#6379098剛纔,這似乎是在同一地區(發現有點太遲了,抱歉:-)) – user2037606 2013-02-24 11:45:41

回答

4

您可以在運行時創建整個Core Data模型 - 根本不需要使用Xcode的數據建模器,並且API支持創建和配置模型的每個細節。但它可能不像你想要的那樣靈活。雖然您可以創建新的實體描述或修改現有描述,但您只能在之前加載數據存儲文件之前執行。一旦你讀取和寫入數據,你必須考慮數據模型是固定的。在這一點改變它會產生一個異常。

它與典型的SQLite用法不太一樣。這有點像SQLite表定義在一個文件中,數據存儲在另一個文件中 - 並且可以在加載實際數據之前即時修改表。 (我知道這不是SQLite真正的工作方式,但這基本上是Core Data強制執行的方法)。

如果您希望按照描述修改模型/架構,那麼使用直接SQLite訪問可能會更好。有一對夫婦的Objective-C的SQLite包裝的,允許一個ObjC樣式的方法,同時仍然支持SQLite的風格訪問:

+0

謝謝。這非常有幫助。 我想我要實現的可以被描述爲一個圖形化的 數據庫前端,對於那些沒有(也不需要任何)數據庫經驗的人來說。您的回覆證實了我的印象。再次感謝。 – user2037606 2013-02-25 09:23:13

+0

在託管對象模型啓動並運行之後,您可以創建它的副本並修改副本,然後切換到使用新模型 - 全部在運行時。 – 2014-03-27 17:21:52