CoreData将一条记录标记为收藏(互斥)

时间:2018-02-02 17:22:20

标签: ios swift database sqlite core-data

概述:

  • 我有一个使用iOS
  • CoreData应用
  • 有一个名为Animal
  • 的实体
  • 它有一组记录LionTigerElephant
  • 我想将只有一个记录标记为收藏。

具有相同方法的类似实体:

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

原因:

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

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

我想到的可能模型:

1。字段名为isFavourite

  • 在名为Animal的{​​{1}}中创建一个字段。
  • 仅将isFavourite中的一行标记为isFavourite
  • 要维护的大部分逻辑是“收藏”是用代码管理的。

2。单独的实体名为Favorite

  • 创建一个名为true的单独表格,其中包含一个虚拟行。
  • 建立从FavouriteFavourite的{​​{1}}关系。
  • 这将指向最喜欢的记录。

的问题:

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

2 个答案:

答案 0 :(得分:2)

使用选项2,也可以将其命名为Config。如果你想确保它只是一个单身人士,那就添加一个唯一且只能为零的属性。

如果反向关系为非零,则可以编写辅助计算器var返回true。

选项2的主要优点是更改收藏夹的简单性,您不必扫描所有项目来设置它们非喜欢只需在单件配置上更改它。

答案 1 :(得分:1)

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

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

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

第三种方法是将最喜欢的动物的objectID保存在核心数据之外的某个位置,例如UserDefaults。保存,然后使用NSManagedObjectContext的{​​{1}}方法找到收藏夹。您无法直接保存existingObject(with:),但可以获取NSManagedObjectID并保存。

在大多数情况下,我可能会选择#1,但这取决于我在应用中需要的其他内容。