【问题标题】:CoreData mark one record as favourite (mutually exclusive)CoreData 将一条记录标记为收藏(互斥)
【发布时间】:2018-07-13 06:13:17
【问题描述】:

概述:

  • 我有一个使用CoreDataiOS 应用程序
  • 有一个实体叫Animal
  • 它有一组记录LionTigerElephant
  • 我想将只有一个记录标记为收藏。

采用相同方法的类似实体:

  • 同样,我可以拥有其他实体,例如 CarBike
  • 每个实体都有一组记录。
  • 同样,每个实体都应该只有一个最喜欢的记录

原因:

  • 应用可以选择创建新文档
  • 创建新文档时,将填充每个实体的默认值(通过选择每个实体的收藏记录)

注意:在给定时间只能将一条记录标记为收藏

我想到的可能模型:

1。名为 isFavourite 的字段

  • Animal 中创建一个名为isFavourite 的字段。
  • 仅将其中一行标记为isFavouritetrue
  • 维护 isFavourite 的大部分逻辑都在代码中进行管理。

2。名为 Favourite 的单独实体

  • 创建一个名为Favourite 的单独表,并在其中包含一个虚拟行。
  • 建立从FavouriteAnimal 的关系,称为animal
  • 这将指向最喜欢的记录。

问题:

  1. 解决此问题的首选方法是什么?
  2. 还有其他选择吗?

【问题讨论】:

    标签: ios swift database sqlite core-data


    【解决方案1】:

    选择选项 2,也许称它为 Config。如果您想确保它只是一个单例,请添加一个唯一且只能为零的属性。

    如果反向关系不为 nil,您可以编写一个辅助计算 var 返回 true。

    选项 2 的主要优点是更改收藏夹的简单性,您不必扫描所有项目以将它们设置为非收藏夹,只需在单例配置中更改即可。

    【讨论】:

    • 设置唯一和检查约束当然有帮助。并将其重命名为 Config 使目的更加清晰。谢谢
    【解决方案2】:

    考虑一下应用程序的其他部分以及您将来可能想做的事情。

    添加字段:工作正常,但需要维护一些代码,这可能容易出错。另一方面,也许有一天该应用程序可能允许多个收藏夹,而这将适用于此。

    使用单独的实体:也可以,但添加一个全新的实体,您将只有一个实例。一般来说,如果您有一个只需要一个实例的实体,那么您做错了。另一方面,这也适用于多个收藏夹的潜力。

    第三种方法是将objectID 保存为Core Data 之外最喜欢的动物,例如UserDefaults。保存它,然后使用NSManagedObjectContextexistingObject(with:) 方法找到收藏夹。您无法直接保存NSManagedObjectID,但您可以获取它的uriRepresentation() 并保存。

    在大多数情况下,我可能会选择 #1,但这取决于我在应用中还需要什么。

    【讨论】:

    • 我将来可能会有更多像Car Bike 这样的实体,其中包含一些数据。每个实体都需要有一个单独的收藏夹。再次,最喜欢的只需要记录。这一切的原因是当用户创建一个新文档时,它将填充这些默认值(从每个实体的收藏记录中选择)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2019-02-18
    • 2021-06-11
    • 1970-01-01
    • 2021-04-14
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多