I have class handling some CoreData stuff
class GenreData: NSObject {
var genreID: Int = 0
var genreName: String = ""
@Published var isError = false
func getGenreName() -> String {
let request = NSFetchRequest<NSManagedObject>(entityName: "Genres")
request.predicate = NSPredicate(format: "genID == \(genreID)")
var genre = [NSManagedObject]()
do {
try genre = context.fetch(request)
} catch let error {
isError = true
print(error.localizedDescription)
}
return genre.first!.value(forKey: "genName") as! String
}
}
and I'd like to know how to initiate alert in my ContentView in case of error occured in the class.
.alert(isPresented: $isError, content: {
Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text(alertButton1)))
})
.alert(isPresented: $objGenre.dataError, content: {
Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text(alertButton1)))
})
.alert(isPresented: $deleteAlert, content: {
Alert(title: Text(alertTitle), message: Text(alertMessage), primaryButton: .destructive(Text(alertButton1)) {
objGenre.deleteGenre()
objGenre.genreID = 0
selectedGenreName = ""
}, secondaryButton: .cancel(Text(alertButton2)))
})
I set class as @ObservableObject objGenre in ContentView and declared @Published var isError in the class but alert is not shown even if isError is set to true.
Your GenreData
class needs to conform to the ObservableObject
protocol and you need a strong reference of it in your view with the property wrapper of @ObservedObject
. That will enable the published property to update view state and display the alert. This article is a good place to start if you want to learn about alerts in SwiftUI
..
https://medium.com/better-programming/alerts-in-swiftui-a714a19a547e