Hallo Freunde der App-Entwicklung,
ich hatte in einem anderen Forum-Post bereits beschrieben warum ich diese Frage hier stelle und um diese Fragen / Themen nicht zu vermischen hier der neuen Post.
Das Problem noch einmal kurz zusammen gefasst:
Durch einen nicht bedachten Fehler kam es dazu, dass nil-Werte in die CoreData-Datenbank geschrieben wurden. Jetzt muss ich die gesamte Datenbank prüfen und alle nil-Werte entfernen.
Dazu nutze ich nachfolgende Funktion:
Alles anzeigen
Meine Frage ist jetzt, ob ihr das genau so machen würdet, oder ob es vielleicht eine, mir noch nicht bekannte, Funktion dafür gibt, um die gesamte Datenbank von nil-Werten zu bereinigen. Da die App bereits von vielen User genutzt wird muss ich echt vorsichtig sein, dass es zu keinem Datenverlusts bei dieser Korrektur kommt.
Vielen Dank für eure Unterstützung und Tipps! Ich bin gespannt ob ich auf dem richtigen Weg bin, oder ob es auch ganz anders geht!
ich hatte in einem anderen Forum-Post bereits beschrieben warum ich diese Frage hier stelle und um diese Fragen / Themen nicht zu vermischen hier der neuen Post.
Das Problem noch einmal kurz zusammen gefasst:
Durch einen nicht bedachten Fehler kam es dazu, dass nil-Werte in die CoreData-Datenbank geschrieben wurden. Jetzt muss ich die gesamte Datenbank prüfen und alle nil-Werte entfernen.
Dazu nutze ich nachfolgende Funktion:
Quellcode
- func checkIfCoreDataHasNilValues(){
- guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
- return
- }
- let context = appDelegate.persistentContainer.viewContext
- let request = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
- do{
- let results = try context.fetch(request)
- if(results.count > 0){
- for r in results {
- if let result = r as? NSManagedObject{
- if( result.value(forKey: "name") as? String == nil){
- result.setValue("", forKey: "name")
- }
- if( result.value(forKey: "mail") as? String == nil){
- result.setValue("", forKey: "mail")
- }
- if( result.value(forKey: "date") as? NSDate == nil){
- result.setValue(Date(), forKey: "date")
- }
- }
- }
- }else{
- print("CHECK User > 0")
- }
- }catch{
- print(error)
- }
- let request UserData = NSFetchRequest<NSFetchRequestResult>(entityName: "UserData")
- do{
- let resultsUserData = try context.fetch(requestUserData)
- if(resultsUserData.count > 0){
- for rUserData in resultsUserData {
- if let resultUserData = rUserData as? NSManagedObject{
- if( resultUserData.value(forKey: "extradata") as? String == nil){
- resultUserData.setValue("no name", forKey: "extradata")
- }
- }
- }
- }else{
- print("CHECK UserData > 0")
- }
- }catch{
- print(error)
- }
- ...
- weitere Datenbank-Entities
- ...
- }
Vielen Dank für eure Unterstützung und Tipps! Ich bin gespannt ob ich auf dem richtigen Weg bin, oder ob es auch ganz anders geht!

Neu in der IOS-App-Entwicklungswelt - Spannend, ab und an nervenaufreibend, aber am Ende einfach faszinierend. Seid bitte nicht zu streng wenn ich Fragen einmal doppelt stelle, ich lerne noch 
