swift - 在 Swift 包中使用 CoreData 和 SwiftUI 预览时出现问题
问题描述
tldr:快速包内的CoreData,有效;swift 包中的 SwiftUI 可以正常工作;两者一起在 swift 包中的预览中,不起作用。
我有以下内容:
- 一个快速的项目(仅限 iOS,为了简单起见)
- 通过 Xcode 创建的包(New->Swift Package)
- swift 包有一个 Core Data 模型和 PersistenceController
- swift 包有一个 SwiftUI 视图,它几乎是默认样板 ContentView 的逐行副本(只是重命名为 OriginalContentView 以避免任何冲突的可能性)
以下按预期工作:
- 在 swift 包中的 test 包中,测试成功运行——这些测试包括使用内存存储启动 PersistenceController、播种一些数据、测试一些创建、读取、更新和删除,以及一些使用谓词和排序描述符。所有这些测试都通过并按预期工作。
- 在主 iOS 应用程序中,如果我导入我的包并将 OriginalContentView 放在主 ContentView SwiftUI 视图中,则预览会按预期工作(当我根据样板将包的 PersistenceController 的内存存储的上下文传递给环境对象时)
- 同样在主 iOS 应用程序中,我可以构建一个应用程序并使用持久存储(即不在内存中)在模拟器中运行它。应用程序正确加载、正常工作,并按预期在应用程序构建和加载之间保留数据。
我将上述所有内容放在那里是为了表明,对于所有意图和目的,包中的 Core Data 模型和 SwiftUI 视图都可以工作 - 在该包的测试中、在主 iOS 应用程序的预览中以及在构建中。
另一件有效的事情是,如果我在我的包中创建一个没有核心数据依赖项的 SwiftUI 视图类(即,只是一个普通的 hello 世界视图,或者一个带有一些动画的更复杂的东西),则将构建目标切换到我的打包,然后打开画布,我可以正常预览视图。
但是,如果我尝试在包中的预览中使用内存中的 PersistenceController,预览会失败,提示“无法在此文件中预览 - 由于未捕获的异常而崩溃”,然后单击“诊断”,我收到以下错误:
A fetch request must have an entity..
----------------------------------------
UncaughtExceptionError: Crashed due to an uncaught exception
Xcode Previews crashed due to an uncaught exception `NSInvalidArgumentException`. Reason: executeFetchRequest:error: A fetch request must have an entity..
==================================
| HumanReadableNSError: Rendering service was interrupted
|
| com.apple.dt.xcodepreviews.service (12):
从一些谷歌搜索来看,这个错误似乎出现在几种不同的情况下,但我已经消除了每一个(我不是懒惰加载我的托管对象上下文,我的类名和实体名是相同的 - 这两个是不断出现的向上)
同样,它在嵌入到主要 iOS 构建目标中的视图中时工作(在模拟器中预览和运行),这让我认为在包中和在实际应用程序中运行画布预览之间存在某种环境差异与CoreData混淆的目标......?
(我使用的是 Xcode 12.4)
解决方案
推荐阅读
- vulkan - 对图像及其视图使用不同的 VkDevice
- php - SQLITE 数据库文件未从目录外部读取
- python-3.x - Microsoft 认知服务语音 SDK 调试问题
- python - 遍历一列的每一行并执行操作
- spring - 使用 pom.xml 管理 Nexus 存储库
- ruby - 执行测试时无法加载此类文件 - dbd-pg (LoadError)
- elasticsearch - 如何将聚合结果重新索引到 Elasticsearch 中的另一个索引中?
- html - 从 dom 中删除 svg 后,svg 中的图像会继续加载
- android - 何时将数据保存在 DB 中,何时保存在简单类中更好
- angular - Angular 项目中的 CSS