4

我一直在使用 Core Data 开发几个 iOS 应用程序,它是一个很好的框架。但是,我遇到了一个问题,即我们或多或少地跨多个平台分发对象(同步)。Web/数据库服务器后端和移动设备。

虽然直到现在还没有成为问题,但 Core Data 使用的数据模型的静态特性让我有点卡住了。基本上,所要求的是一个动态表单系统,可以在服务器上创建表单并将其传播到设备。我知道使用一组表执行此操作的技术,例如:

  • 表格
  • 字段表
  • Forms 表的实例
  • 实例值表

只是将所有东西连接在一起。然而,我想知道的是,是否有一个替代核心数据的系统(上面的东西直接与 SQLite 数据库对话)将允许更动态的对象图。如果有在运行时修改模式的选项,即使是标准的 ORM 也会很好。我想走这条路的主要原因是为了提高性能,因为我不希望实例值表随着条目(在本地设备或服务器上)爆炸。

我的另一个选择是在 iOS 设备上拥有静态架构(对象图),但在服务器端有一个转换层,它获取正确的对象、填充属性并将其保存到正确的表中。然后,当设备开始同步时,它会执行相反的操作并将其分解为多个实例。虽然这可以避免服务器出现臃肿的实例值表,但它仍然可能是设备上的问题。

任何建议表示赞赏。

4

2 回答 2

1

对表单和字段使用特定的表/实体,并为每个实例使用实体,这可能是我推荐的。如果 ORM 模式会经常发生,那么尝试动态地操作它通常看起来不是一个好主意。

但是,如果模式只是不经常更改,您可能可以使用 Core Data 来完成。您可以NSManagedObjectModel在创建NSManagedObjectContext. 您还可以创建迁移逻辑,以便在更新模型并需要重新创建上下文和存储时保留旧模型中存储的数据。

这些其他 SO 帖子可能会有所帮助:

于 2011-07-21T13:45:23.837 回答
0

您需要仔细考虑您实际建模的内容。

您是否在建模:(1) 实际的“表单”,即 UI 元素,(2) 可能在任意数量的 UI 版本中呈现的数据,例如firstName 或 (3) 两者?

为表单建模而设计的数据模型将具有以下实体:

Form{
  name:string
  fields<-->Field.form
}

Field{
  width:number
  height:number
  xPos:number
  yPos:number
  label:sting
  nextTab<-->Field.priorTab
  priorTab<-->Field.nextTab
  form<<-->Form.fields
}

您将使用它来存储有关用户界面中显示的表单的数据。然后,您将拥有一个单独的实体,并且可能还有一个单独的模型来存储将填充由第一个数据模型配置的 UI 元素的实际数据。

你可以使用 Core Data 来建模任何你需要知道你真正建模的东西。

于 2011-07-22T18:39:40.290 回答