Core Data Trouble – Can’t save nor update value correctly

Hello everybody,

 

I am developing my first app. The layouts are done and everything is working fine. My only problem now is with Core Data. I have a transition fom one Segue to the other and with that I pass a boolean value that tells me what happened before.

 

The values are behind passed correctly, I debbuged that but the variables I want to update are always wrong and changing, for exemple, from 2 to 14. I only added one.

 

This is my swift code.

 

import UIKit
import CoreData

class StartScreenVC: UIViewController {
    
    var guessedNumber: Bool = false
    var gameCompleted: Bool = false
    
    @IBOutlet weak var gamesCompletedLabel: UILabel!
    @IBOutlet weak var numbersGuessedLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        
        let entity = NSEntityDescription.entity(forEntityName: "User", in: context)
        let thisUser = NSManagedObject(entity: entity!, insertInto: context)
        
        let request = NSFetchRequest(entityName: "User")
        request.returnsObjectsAsFaults = false
        
        func update() {
            var toDisplayGuessedNumbers: Int!
            var toDisplayCompletedGames: Int!
            
            let request = NSFetchRequest(entityName: "User")
            request.returnsObjectsAsFaults = false
            do {
                let result = try context.fetch(request)
                for data in result as! [NSManagedObject] {
                    toDisplayGuessedNumbers = (data.value(forKey: "numbersGuessed") as! Int)
                    toDisplayCompletedGames = (data.value(forKey: "gamesCompleted") as! Int)
                    
                    if guessedNumber {
                        toDisplayCompletedGames = toDisplayCompletedGames + 1
                        toDisplayGuessedNumbers =  toDisplayGuessedNumbers + 1
                        thisUser.setValue(toDisplayGuessedNumbers, forKey: "numbersGuessed")
                        thisUser.setValue(toDisplayCompletedGames, forKey: "gamesCompleted")
                        try context.save()
                    }
                    else if gameCompleted {
                        toDisplayCompletedGames = toDisplayCompletedGames + 1
                        thisUser.setValue(toDisplayCompletedGames, forKey: "gamesCompleted")
                        try context.save()
                    }
                    gamesCompletedLabel.text! = String(data.value(forKey: "gamesCompleted") as! Int)
                    numbersGuessedLabel.text! = String(data.value(forKey: "numbersGuessed") as! Int)
                }
            } catch {
                print("Failed")
            }
        }
        
        do {
            let result = try context.fetch(request)
            for data in result as! [NSManagedObject] {
                if guessedNumber || gameCompleted {
                    update()
                }
                else {
                    let currentGuessedNumbers = (data.value(forKey: "numbersGuessed") as! Int)
                    let currentGamesCompleted = (data.value(forKey: "gamesCompleted") as! Int)
                    
                    gamesCompletedLabel.text! = String(currentGamesCompleted)
                    numbersGuessedLabel.text! = String(currentGuessedNumbers)
                }
            }
        } catch {
            print("Failed")
        }
    }
    
    @IBAction func showDifficultyPopUp(_ sender: Any) {
        let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "chooseDifficultyVC") as! difficultyPopUp
        self.addChildViewController(popOverVC)
        popOverVC.view.frame = self.view.frame
        self.view.addSubview(popOverVC.view)
        popOverVC.didMove(toParentViewController: self)
    }
}

 

When the view loads it sets up core data stuff and then goes to line 56, I think. Then, deppending on the guessedNumber and gameCompleted variables I go to the update function. That is where i think the problem is.

 

I want to update the gamesCompleted and the numbersGuessed values. The app just does weird stuff with the numbers, I cant get it right. Some help would be very nice. 

 

Thank you very much.

Powered by WPeMatico

About

You may also like...

Comments are closed.