我正在开发一个列表应用程序,并且我有一些针对一种特定数据类型的添加/删除/编辑/加载功能,但是我想概括这些功能,这样我就可以从内部对任何数据类型执行相同的操作任何观点。
我已经设置了一个全局变量类:
import SwiftUI
import CoreData
class GlobalVariableClass: ObservableObject {
@Published var itemObjects: [NSManagedObject] = []
}
将类的实例放置在 SceneDelegate 中
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var globalVariables = GlobalVariableClass()
...
将实例传递给 contentView
let contentView = Home()
.environmentObject(globalVariables)
.environment(\.managedObjectContext, context)
现在当我宣布@EnvironmentObject var globalVariables: GlobalVariableClass
任何里面view,我可以访问itemObjects
,它存储输入到文本字段中的所有项目。
这很棒,但我正在尝试使用不在视图内的全局函数。
我将它们声明在全局级别的单独文件中,以便它们具有公共访问权限。
确切的问题在下面do
block.
func loadItems() {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "Item")
do {
GlobalVariableClass().itemObjects = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
使用以下方式访问 itemObjectsGlobalVariableClass().itemObjects
结果我的应用程序中没有加载任何内容。
虽然如果我在 listItem 视图中声明加载函数,则声明环境对象globalVariables
,然后将其更改为
do {
globalVariables.itemObjects = try managedContext.fetch(fetchRequest)
}
然后一切都加载得很好。
关于如何从全局函数中访问 itemObjects 有什么建议吗?