Swift 当从另一个结构调用函数时,为什么调用函数作为NSManagedObjectContext的扩展会导致错误?

Swift 当从另一个结构调用函数时,为什么调用函数作为NSManagedObjectContext的扩展会导致错误?,swift,core-data,Swift,Core Data,我在Xcode中创建了一个新项目,其中包含CoreData的锅炉板代码 我制作并希望使用此扩展作为制作项目的一种方式 扩展NSManagedObjectContext{ func makeItem(日期:date=date()){ 让newItem=Item(上下文:self) newItem.timestamp=日期 做{ 试试self.save() }抓住{ 设nsError=错误为nsError fatalError(“未解决的错误\(nsError),\(nsError.userInfo

我在Xcode中创建了一个新项目,其中包含
CoreData
的锅炉板代码

我制作并希望使用此扩展作为制作项目的一种方式

扩展NSManagedObjectContext{ func makeItem(日期:date=date()){ 让newItem=Item(上下文:self) newItem.timestamp=日期 做{ 试试self.save() }抓住{ 设nsError=错误为nsError fatalError(“未解决的错误\(nsError),\(nsError.userInfo)”) } } } 但是,当我做另一个结构时

struct调用自{
@环境(\.managedObjectContext)私有变量viewContext
func itemfromotherstructBreaked(){
viewContext.makeItem()
}
func itemFromOtherStructWorks(视图上下文:NSManagedObjectContext){
makeItem(viewContext)
}
}
并从我的
ContentView

struct ContentView:View{
@环境(\.managedObjectContext)私有变量viewContext
var calledFrom=calledFrom()
@获取请求(
SortDescriptor:[NSSortDescriptor(键路径:\Item.timestamp,升序:true)],
动画:。默认设置)
私有变量项:FetchedResults
var body:一些观点{
VStack{
按钮(“从ContentView文件添加项目”){
viewContext.makeItem()
}
按钮(“从另一个结构添加项”){
//从另一个结构添加项
从.itemFromOthStructBreaked()调用
}
按钮(“工作,来自其他结构”){
从.itemFromOtherStructWorks调用(viewContext:viewContext)
}
我得到了错误

Fatal error: Unresolved error Foundation._GenericObjCError.nilError, [:]: file ViewContextTesting/ContentView.swift, line 115
2021-04-12 10:01:47.914082-0700 ViewContextTesting[99002:6044606] Fatal error: Unresolved error Foundation._GenericObjCError.nilError, [:]: file ViewContextTesting/ContentView.swift, line 115
(lldb)
这个错误指向
NSManagedObjectContext
上的扩展

但是,如果我从另一个结构调用另一个函数,并且该函数将
NSManagedObjectContext
作为函数参数,那么创建核心数据实体对象就可以正常工作

struct ContentView:View{
...
按钮(“工作,来自其他结构”){
从.itemFromOtherStructWorks调用(viewContext:viewContext)
}
...

我很好奇为什么会发生这种情况,以及调用函数作为类型的扩展和调用函数作为函数的参数有什么区别。

您只能在视图中使用@Environment,而不能在普通结构中使用@Environment。尝试使用NSManagedObjectContext对象的依赖项注入,看看它是否可以在b中使用艾特。