Warm tip: This article is reproduced from serverfault.com, please click

How to show alert in ContentView based on error in class

发布于 2020-12-18 20:58:59

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.

Questioner
Dawy
Viewed
0
745 2021-03-15 14:00:26

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