【问题标题】:How do to start with clean Managed Object Context without deleting objects in Core Data如何在不删除核心数据中的对象的情况下从干净的托管对象上下文开始
【发布时间】:2019-05-16 08:30:22
【问题描述】:

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

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

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

感谢您的耐心等待。

【问题讨论】:

  • 所有数据库都可以使用谓词过滤数据。将适当的NSPredicate 添加到您的NSFetchRequest
  • 您的Workout 应该有一个指向其Exercises 的引用字段。当您开始新的锻炼时,该列表将为空。

标签: ios iphone swift core-data swift4


【解决方案1】:

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

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

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

您可能会发现查看 Apple 的 Core Data 编程指南中的 Creating Managed Object Relationships 很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多