Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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
Ios 核心数据如何正确设计_Ios_Objective C_Core Data - Fatal编程技术网

Ios 核心数据如何正确设计

Ios 核心数据如何正确设计,ios,objective-c,core-data,Ios,Objective C,Core Data,假设我有一个实体A和一个实体B。这种关系是1:1。如果我删除A,那么B也应该被删除。我用级联删除规则设置了这个。现在假设我添加了另一个实体C,它与B的关系为1:1 我不知道如何恰当地处理这个问题。如果A和C具有相同的B是否应该是B的相同实例?或者我应该复制条目吗?如果是相同的,则删除A不能再删除B,如果C有引用 此外,我如何在A和B之间实施这种1:1关系?在我创建A实体的时候,我也创建了B实体,不检查它是否已经在数据库中。这不会失败,并会导致重复的B 编辑:为了更好地理解我想要实现的目标: A必

假设我有一个实体A和一个实体B。这种关系是1:1。如果我删除A,那么B也应该被删除。我用级联删除规则设置了这个。现在假设我添加了另一个实体C,它与B的关系为1:1

我不知道如何恰当地处理这个问题。如果AC具有相同的B是否应该是B的相同实例?或者我应该复制条目吗?如果是相同的,则删除A不能再删除B,如果C有引用

此外,我如何在AB之间实施这种1:1关系?在我创建A实体的时候,我也创建了B实体,不检查它是否已经在数据库中。这不会失败,并会导致重复的B

编辑:为了更好地理解我想要实现的目标:

A必须始终有ABC还必须始终具有aB

例如,假设我有一个实体商店(B)和一个实体收藏夹(A)。将来我可能会添加另一个实体,它也将使用Shop。因此,如果用户创建了一个收藏夹,他会给它一个名称和一个商店。现在,如果我不检查这个商店是否已经在数据库中,我将创建另一个。另一方面,如果我允许重复,我可以使用级联删除规则,并且一定不要害怕,如果我删除一个收藏夹,它会留下另一个收藏夹,其中一个商店是空的


我觉得有点迷茫,我不确定在这种情况下最好的做法是什么。任何帮助都会被告知。

这取决于你想做什么。如果没有a,B就不能存在,那么级联仍然适用。但是,如果C可以导致B仍然存在,那么您应该删除级联删除

但这也引出了一个问题:如果其中任何一个不存在,那么其他的就不存在了。这可能意味着如果A被删除,您需要同时删除B和C

让我们将此应用于一个示例

A=主体 B=头 C=大脑

让我们说这些都是人类生存所需要的东西。没有身体,脑袋和大脑就不能工作。其余部分也是如此。因此,如果这些部分中有一部分死亡,其他部分也会死亡

好,现在如果A和C有相同的B,那么这应该是唯一的B,而不是重复的

CoreData的任何实现都应该在创建新实体之前检查实体的存在,除非您可以保证它只属于一个特定实体。如果不检查重复项,则A和B必须始终是唯一的。现实世界中很少有永远独一无二的价值观。一个特定的时间将是一个始终唯一的实例。这第二个只存在于现在,永远不会再存在,以前也不存在过


如果一个新的a创造了一个B,那就好了。但是,如果A和C都可以有相同的B,那么您必须检查现有的B,否则A和C将永远无法共享A B。如果您的A永远只有1个B,而没有其他任何东西使用B,然后,只要始终创建唯一的A,您就可以这样做。

唯一好的答案需要了解数据代表什么以及如何使用数据。有一个重复的B有意义吗?也许,也许不是,答案取决于B实际代表什么以及它与C的关系。我希望我现在想要实现的目标更加明确。谢谢你的详细回答。在我的例子中,如果我创建一个A,它必须有一个B。如果我创建一个C,它也必须有一个B。A和C没有关系。嗯,它们确实有关系,如果它们有相同的B,它们通过B关联。无论如何,在这种情况下,您可能应该检查B的重复项:祝你好运!