【问题标题】:How to represent flexible data models in Core Data?如何在 Core Data 中表示灵活的数据模型?
【发布时间】:2020-05-05 01:17:45
【问题描述】:

我对数据持久性和核心数据的世界还很陌生,我很难为我的应用程序表示一个模型。

我的应用程序是一个表单集合,并且将具有一个“模板编辑器”,允许用户选择这些表单应包含哪些字段。例如,用户可能想要创建具有“姓名”、“年龄”和“图片”字段的表单。这三个属性都可以是不同的类型(字符串、整数和数据)。此外,不能保证用户会选择什么。如果他们愿意,他们可以添加 45 个不同的字段,包括自定义字段(带有自己的标题)。

我的问题是在 Core Data 中对其中一种形式进行建模的有效方法是什么?

我想过代表模型中的每个属性,或者用所有字段制作一个字典属性......但由于我是初学者,我害怕做出错误的技术选择,这可能会损害应用程序的效率或能力执行谓词等。

提前谢谢你????

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    我相信字典模型最适合这个,因为你不知道用户将使用多少个字段。但是您可以将这些字段值保存为字符串类型并将其存储在您的核心数据中。

    【讨论】:

      【解决方案2】:

      使用Microsoft Excel 进行原型设计和数据库设计。完成后,创建您的 CoreData 模型。

      【讨论】:

        【解决方案3】:

        由于用户可以在模板中添加n 数量的字段,将每个字段都添加到数据库中并不是一个好主意。这将导致较大的大小,这将破坏 db 标准化。

        最好将模板转换为单个 json,它可以根据模板名称或 id 存储在文件中。如果您已经有数据库,则可以将文件名链接到用户对象。可以使用相同的 json 上传到服务器或从相同的 json 文件再次渲染模板。

        即使您可以根据id 定位字段,否则即使您可以在json 中添加position 字段以维护字段顺序。

        示例:

        {
          "template_id": "xyz",
          "fields": {
            "textfield": [
              {
                "label": "First Name",
                "value": "Stack",
                "id": 1
              },
              {
                "label": "Last Name",
                "value": "Overflow",
                "id": 2
              }
            ],
            "image": [
              {
                "label": "Profile Photo",
                "value": "/Document/Images/Profile.jpeg",
                "id": 3
              }
            ],
            "date_picker": [
              {
                "label": "DOB",
                "value": "01/01/1980",
                "id": 4
              }
            ]
          }
        }
        

        【讨论】:

          【解决方案4】:

          为什么不为您的模型使用这种简单的设计?在这里,它们表示为结构,但它们很容易转换为实体

          struct Form {
              var name: String
              var fields: [Field]
          }
          
          struct Field {
              var name: String
              var type: String //Maybe an enum in code
              //var form: Form :in a struct you don't have this property but your entity will have it as a relationship
          }
          

          【讨论】:

          • 这太棒了!我还有一个问题。您将如何在 Core Data 中表示该字段的值?鉴于它可以表示字符串、数字或图像等等……
          猜你喜欢
          • 1970-01-01
          • 2012-08-23
          • 2013-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多