Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS上的核心数据替代方案_Objective C_Ios_Core Data_Orm_Object Graph - Fatal编程技术网

Objective c iOS上的核心数据替代方案

Objective c iOS上的核心数据替代方案,objective-c,ios,core-data,orm,object-graph,Objective C,Ios,Core Data,Orm,Object Graph,我一直在使用核心数据开发几个iOS应用程序,它是一个非常好的框架。然而,我遇到了一个问题,即我们或多或少在多个平台上分布了对象(同步)。web/数据库服务器后端和移动设备 尽管到目前为止这还不是一个问题,但核心数据所使用的数据模型的静态特性让我有点困惑。基本上,所请求的是一个动态表单系统,通过该系统,可以在服务器上创建表单并将其传播到设备。我了解使用一组表执行此操作的技术,这些表包括: 表格 字段表 表单表的实例 实例值表 把一切联系起来。然而,我想知道的是,是否有一个替代核心数据的系统(上

我一直在使用核心数据开发几个iOS应用程序,它是一个非常好的框架。然而,我遇到了一个问题,即我们或多或少在多个平台上分布了对象(同步)。web/数据库服务器后端和移动设备

尽管到目前为止这还不是一个问题,但核心数据所使用的数据模型的静态特性让我有点困惑。基本上,所请求的是一个动态表单系统,通过该系统,可以在服务器上创建表单并将其传播到设备。我了解使用一组表执行此操作的技术,这些表包括:

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

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


如有任何建议,我们将不胜感激

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

但是,如果模式只是不经常更改,则可以使用核心数据进行更改。在创建
NSManagedObjectContext
之前,您可以通过编程方式创建和/或操作
NSManagedObjectModel
。您还可以创建迁移逻辑,以便在更新模型并需要重新创建上下文和存储时,可以保留存储在旧模型中的数据

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


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

您是否在建模:(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
}
表单{
名称:string
fieldsField.form
}
场{
宽度:数字
身高:多少
xPos:数量
yPos:编号
标签:sting
nextabfield.priorTab
priorTabField.nextTab

formAh我一直在寻找一些关于在运行时改变MOM的细节。感谢这些参考资料。事实上,我并不期望模型会经常改变-但是我只是记住了应用程序的可伸缩性(特别是在移动设备上)。我从doco猜测,一旦模型改变了(多亏了后台处理,在标准执行期间可能会发生这种情况),然后我必须重新加载持久性存储(以及迁移等)并重新初始化所有与数据库相关的内容。这是可行的,使用这种技术,我可以在平台之间共享数据模型。我将存储UI的信息,以及表单对象的实际数据布局。这里的主要问题是表单本身是动态的(每个客户端的后端是多个Tennet)因此,对象图会发生变化。我可以基于描述对象的固定表进行建模,也可以在运行时基于服务器动态构建对象模型。我希望为每个模板使用单独的表的原因是,我们最终可能会得到大量数据。我知道您的目的不是将核心数据视为数据库,而是性能从ce的角度来看,这是必须考虑的。听起来你可能真的想要基于文档的设计,而不是标准的核心数据堆栈。在文档设计中,每个文档都有自己的堆栈,“文档”实际上只是一个持久存储,只包含与一个逻辑文档关联的信息。在你的情况下,每个“文档”可能由两个存储区组成:一个用于UI表单的存储区和一个用于表单中显示的数据的存储区。如果每次都不一样,则没有设计或API需要将所有这些差异塞进一个大存储区。我知道这是针对iOS的,但请查看MacOS NSPersistentDocument类,以了解核心数据如何与文档一起工作ument architecture.hey@Dave这个怎么样?