【发布时间】:2020-04-12 18:31:37
【问题描述】:
我有一个 SwiftUI View 结构,我在 init 函数中将一个 Place 对象传递给该结构。使用 id 我想从 CoreData 加载相应的 UserPlaceInfo。 不幸的是,当我尝试访问 init 函数中的 fetchedResults 时,我的应用程序崩溃了。 如果我在 onAppear 中使用相同的代码,这将毫无问题。
private var fetchRequest : FetchRequest <UserPlaceInfo>
private var fetchedResults: FetchedResults<UserPlaceInfo> { fetchRequest.wrappedValue }
init(place : Place) {
self.place = place
fetchRequest = FetchRequest<UserPlaceInfo>(entity : UserPlaceInfo.entity(), sortDescriptors : [] , predicate: NSPredicate(format: "id == %@", place.id))
// Application crashes here!
let count = fetchedResults.count
}
为什么会这样?我该怎么办? 我做错了什么还是 fetchedResults 目前还不可用? 我很早就需要结果,因为如果CoreData中没有UserPlaceInfo,我必须创建这样一个对象。
更新
添加 fetchRequest.update() 有点帮助。现在我收到一条更有用的错误消息:环境中的上下文未连接到持久存储协调器
我还是不明白发生了什么。我将 managedObjectContext 添加到 SceneDelegate 中的环境中,如果我在 onAppear 中执行此操作,则获取工作正常。
【问题讨论】:
-
在fetchedResults使用前尝试使用
fetchRequest.update() -
崩溃日志中显示的错误信息是什么?
-
这是 MacOS 还是 iOS?最后一个错误看起来像是在 MacOS 上尚未加载持久存储协调器的问题。在 AppDelegate 中为
var persistentContainer删除lazy或确保在创建 ContentView 之前对其进行初始化是一种解决方案。 -
@JoakimDanielson 这是 iOS 但仍在模拟器中。消除惰性并没有帮助。