我在文档/讨论中没有找到明确的“否”,但怀疑无法在运行时以编程方式生成 CoreData 对象。
我想做的类似于从运行代码中执行 DDL 命令(例如“创建表”、“删除表”等),因为我不知道直到我询问用户他的表需要多少列,或者他们需要什么数据类型。也许他需要多张桌子。
有谁知道这是否可能?希望有一个指向要阅读的东西的指针。(我也会很感激学习负面的,所以我可以停止怀疑。)
如果在 CoreData 中不可行,这会是切换到 SQLite 的理由吗?
您可以在运行时创建整个 Core Data 模型——根本不需要使用 Xcode 的数据建模器,并且 API 支持创建和配置模型的每个细节。但它可能不像你想要的那样灵活。尽管您可以创建新的实体描述或修改现有的描述,但您只能在加载数据存储文件之前这样做。读取和写入数据后,您必须将数据模型视为固定的。此时更改它会产生异常。
它与典型的 SQLite 用法不太一样。这有点像 SQLite 表是在一个文件中定义的,而数据存储在另一个文件中——您可以动态修改表,但只能在加载实际数据之前进行。(我知道这不是 SQLite 的真正工作方式,但这基本上是 Core Data 强制执行的方法)。
如果您希望需要按照您的描述修改您的模型/模式,那么直接 SQLite 访问可能会更好。有几个 Objective-C SQLite 包装器允许使用 ObjC 风格的方法,同时仍然支持 SQLite 风格的访问: