SwiftUI Preview Canvas 与核心数据一起崩溃

Posted

技术标签:

【中文标题】SwiftUI Preview Canvas 与核心数据一起崩溃【英文标题】:SwiftUI Preview Canvas crashes with core data 【发布时间】:2020-06-10 18:46:16 【问题描述】:

这可能是一个非常愚蠢的问题,提前抱歉。

我正在使用核心数据和 SwiftUI,我正在尝试制作一个简单的应用程序来存储笔记,但我似乎无法让预览工作。该应用程序在模拟器上运行良好,但在预览画布上崩溃。我已经阅读了很多 Reddit 和 *** 问题,但没有一个与我的问题有关。

我已经将 context 变量传递给我的视图,我 100% 确定不是因为这个原因,因为崩溃报告说 Persistent store migration failed, missing mapping model。我知道它说它需要迁移,但我没有更改任何数据模型(这是一个全新的项目),并且该应用程序在模拟器上运行良好,所以我不确定这是否真的是导致崩溃的原因。

我能想到的只是 SwiftUI 的预览画布可能与其他项目共享同一个数据库并且它是冲突的(这有点道理,因为我有其他项目也使用核心数据,也是在 SwiftUI 中制作的,并且共享一些实体的名称)。

我在使用 Realm 时遇到了同样的问题,我通过在使用预览画布时删除 Realm 数据库文件解决了这些问题,因此每次运行都会清空数据库,我没有任何问题。 这是一个好方法吗?我应该这样做吗?

我会展示我的代码,但它实际上只是一个 ForEach 迭代一个名为 Note 的实体。

【问题讨论】:

您是在预览提供者中设置核心数据上下文信息吗? 如果您对@MwcsMac 的回答是肯定的,那么我首先要测试您的理论。开始一个空白项目并创建一个具有唯一名称的单个实体并进行测试,如果它有效,那么我将继续进行第二个项目并创建一个与之前使用的名称相同的实体并进行测试。如果它失败了,那么这显然是我们的问题,然后我希望 swiftUI 2.0 等待 2 周。如果它确实有效,那么我们可以在不同的领域寻找问题。 @MwcsMac 是的,我正在将上下文信息传递给我的所有预览。 @MuhandJumah 似乎是正确的。我创建了一个全新的项目,在我将实体命名为 Note 之前,预览效果很好,这给了我同样的错误 (missing mapping file)。 我发布了一个答案,请让我知道它是否有效。我无法在评论中发布所有这些内容。 【参考方案1】:

尝试从这里删除预览画布

~/Library/Developer/Xcode/UserData/Previews/Simulator Devices/

然后在命令行中运行以下命令

killall -9 com.apple.CoreSimulator.CoreSimulatorService

终于重启xCode

【讨论】:

太棒了!祝你好运。 @Magnas 据我所知,这是 xcode 的缓存错误。问题是它会以某个名称缓存一个数据模型,当创建一个不同的模型时,它不会创建一个新模型,而是会重用旧模型(因为它们具有相同的名称),因为它基本上找到了它。通过删除,我们迫使 xCode 从头开始​​重新生成这些数据模型而不重用。【参考方案2】:

如果您使用过模拟器,您还需要在 /Users/YOURNAME/Library/Application Support 中删除模型商店

【讨论】:

谢谢!我再也没有遇到过这个问题,但我相信这也可以解决问题。无论如何,按照this 答案中的步骤也可以解决问题

以上是关于SwiftUI Preview Canvas 与核心数据一起崩溃的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI Preview 因 Core Data 'NSInvalidArgumentException' 而崩溃

SwiftUI Preview 不适用于 FetchRequest 和 Init

在范围内找不到 SignInWithAppleButton (SwiftUI 2)

SwiftUI:在 Preview Provider 中执行函数

SwiftUI Preview 因 *** 崩溃

SwiftUI Preview 因链接器错误而失败