Ios 如何从干净的托管对象上下文开始,而不删除核心数据中的对象

Ios 如何从干净的托管对象上下文开始,而不删除核心数据中的对象,ios,iphone,swift,core-data,swift4,Ios,Iphone,Swift,Core Data,Swift4,你必须原谅我,在这个问题上可能没有代码,因为我不知道我会为这个问题包括什么,所以请与我的解释赤裸裸 以下是背景,我正在制作一个健身应用程序,用户可以在其中创建自己的训练。我已将练习成功保存到训练中,并已将这些训练成功保存到。进行训练时,用户为该训练创建的训练列表将显示在表格视图中,表格视图由核心数据填充 我的问题是,当我尝试创建另一个训练时,它仍然会在表视图中显示以前训练中的训练,即使这些训练不是为此训练创建的。因此,用户必须在添加新练习之前手动删除所有旧练习。通过一些测试,我发现该表只有在运行

你必须原谅我,在这个问题上可能没有代码,因为我不知道我会为这个问题包括什么,所以请与我的解释赤裸裸

以下是背景,我正在制作一个健身应用程序,用户可以在其中创建自己的训练。我已将练习成功保存到训练中,并已将这些训练成功保存到。进行训练时,用户为该训练创建的训练列表将显示在表格视图中,表格视图由核心数据填充

我的问题是,当我尝试创建另一个训练时,它仍然会在表视图中显示以前训练中的训练,即使这些训练不是为此训练创建的。因此,用户必须在添加新练习之前手动删除所有旧练习。通过一些测试,我发现该表只有在运行fetch()函数后才能获取填充它的信息,这意味着它可能会从持久性存储容器中获取所有练习。如何在每次创建新训练时清空桌子,而不牺牲已保存的训练

如果你能做到这一点,谢谢你的耐心

一个“干净”的托管对象上下文没有意义,因为上下文的全部目的是访问持久存储。如果它在存储中,上下文可以找到它,并且如果您运行正确的获取,上下文也会找到它

由于您有训练和练习,您可能希望从
Workout
Exercise
建立一对多关系。每个
锻炼
可以有多个相关的
锻炼
对象,每个
锻炼
只能有一个锻炼。然后,通过获得这种关系的价值,你可以得到锻炼的所有锻炼

您描述的视图控制器将显示与特定训练相关的所有练习。如果是新的
训练
,则不会有任何训练,因此列表将为空。添加练习时,您将更新关系,并且列表中只显示当前训练的练习


您可能会发现,阅读《苹果核心数据编程指南》很有用。

所有数据库都可以使用谓词过滤数据。将适当的
NSPredicate
添加到您的
NSFetchRequest
您的
训练
应有一个指向其
练习的参考字段。当您开始新的训练时,该列表将为空。