Swift 您是否需要在performBackgroundTask()中使用并且可以使用perform()和performAndWait()?

Swift 您是否需要在performBackgroundTask()中使用并且可以使用perform()和performAndWait()?,swift,core-data,Swift,Core Data,如果我在storeContainer.performBackgroundTask(){context in…}块中执行CoreData操作(删除本地持久数据、从联机获取新数据、保存到持久存储) 1) 我是否需要在其中使用context.perform(){}来确保它是线程安全的 2) 如果我希望确保(例如)在下载和重新保存之前删除,是否可以对花括号内的部分或全部函数使用context.performAndWait(){} 我遇到了与CoreData保存相关的用户崩溃,测试中没有出现这种情况。我怀

如果我在
storeContainer.performBackgroundTask(){context in…}
块中执行CoreData操作(删除本地持久数据、从联机获取新数据、保存到持久存储)

1) 我是否需要在其中使用
context.perform(){}
来确保它是线程安全的

2) 如果我希望确保(例如)在下载和重新保存之前删除,是否可以对花括号内的部分或全部函数使用
context.performAndWait(){}

我遇到了与CoreData保存相关的用户崩溃,测试中没有出现这种情况。我怀疑我未能理解CoreData的某些内容。尽管搜索了很久,但我还没有在教程或StackOverflow的其他地方找到这个问题的答案

  • performBackgroundTask的主要任务是创建适当的背景上下文,并在相应的队列上调用该上下文。您不需要再次使用“执行”来切换到专用队列
  • performAndWait在主队列上,但上下文是私有的,并且希望完成数据库更新以向前移动时非常有用(类似情况)。您不需要在perform内部调用performAndWait,因为perform内部的代码是串行执行的。不过,使用它并没有害处

  • @AhmadF修正了打字错误。应该是“想要”。