首页 > 解决方案 > 如何在不删除核心数据中的对象的情况下从干净的托管对象上下文开始

问题描述

您将不得不原谅我,这个问题中可能没有代码,因为我不知道我会在这个问题中包含什么,所以请接受我的解释。

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

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

如果您已经做到了这一步,感谢您的耐心等待。

标签: iosiphoneswiftcore-dataswift4

解决方案


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

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

您描述的视图控制器将显示与特定锻炼相关的所有练习。如果是新的Workout,那么还没有任何练习,所以列表是空的。当您添加练习时,您会更新关系,并且只有当前锻炼的练习会出现在列表中。

您可能会发现查看Apple 的核心数据编程指南中的创建托管对象关系很有用。


推荐阅读