【发布时间】:2021-05-17 08:57:13
【问题描述】:
我对 SwiftUI 比较陌生,希望有一个视图,用户可以在其中从 Picker 中的 CoreData FetchRequest 中选择结果。我在视图结构内部但在视图主体外部有以下几行,
@FetchRequest(
entity: Person.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Person.name, ascending: true)
]
) var people: FetchedResults<Person>
@State var currentPerson:Person
在视图主体中,我有一个选择器,它将所选值保存到 currentPerson 但是当我尝试在模拟器中运行程序时,我收到一条错误消息
Missing argument for parameter 'currentPerson' in call
在文件末尾的预览结构中。
如果我尝试使用people 中的第一项初始化currentPerson,我会收到一条错误消息,指出Cannot use instance member 'people' within property initializer; property initializers run before 'self' is available。
除了将Person 对象传递到视图中之外,我工作的另一个解决方案是创建一个对象来初始化currentPerson 变量是创建一个Person 对象但不将托管对象上下文传递为参数。
但是,当我运行程序时,它在控制台中显示CoreData: error: Failed to call designated initializer on NSManagedObject class 'Person',但程序按预期运行。
这是最好的方法还是我错过了一些更好的方法? 谢谢!
【问题讨论】:
-
问题是您试图 (1) 运行 fetch 请求和 (2) 同时设置 currentPerson 变量。实际上,您需要先完成获取请求,然后才能访问返回的数据。一种解决方案可能是使 currentPerson 可选并在没有值的情况下对其进行初始化(@State var currentPerson:Person = nil)。
-
@nicksarno 它也需要一个问号 --
@State var currentPerson : Person? = nil -
@nicksarno @jnpdx 感谢您的帮助,这正是我想要的!我还必须将
as Person?添加到 Picker 标签中,并检查currentPerson变量是否仍然是nil。