'DataCore Query relationship one to one

I am doing an app project in iOS, swift, UIKit and Core Data. I have 2 entities User and Rating in a relationship one to one, a user can have or not a rating ,but a rating must belong to and user. I want to add users ,add ratings and fetch ratings by user name.

import Foundation
import UIKit
import CoreData

class DataBaseHelper {
    
    
    let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
    static var instance = DataBaseHelper()
    static var userSet : User? = User()
    
    
    func addRating(id : Int32, gym : Int32, room: Int32){
        let rating = NSEntityDescription.insertNewObject(forEntityName: "Rating", into: context!) as! Rating
        
        var u  = User()
        var fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
        
        do{
            
            let request = try context?.fetch(fetchRequest) as! User
            if(request != nil){
                u = request as! User
            }
        }catch{
            
        }
        
        rating.ratingID = id
        rating.gym = gym
        rating.room = room
        
        do{
            try context?.save()
        }
        catch{
            print("Data not saved")
        }
        
        var r = Rating()
        var fetchRequest2 = NSFetchRequest<NSFetchRequestResult>(entityName: "Rating")
        
        do{
            let req = try context?.fetch(fetchRequest2) as! [Rating]
            if(req.count != 0){
                let r = req.first as! Rating
            }
        }catch{
            
        }
        
        DataBaseHelper.userSet!.name = rating.ratingOfUser?.name!
        DataBaseHelper.userSet!.name = u.name
        rating.ratingOfUser?.name = DataBaseHelper.userSet!.name
        try! context?.save()
        
    }
    
    func getRatings () -> [Rating]{
        var rating = [Rating]()
        let fReq = NSFetchRequest<NSFetchRequestResult>(entityName: "Rating")
        
        do{
            rating = try context?.fetch(fReq) as! [Rating]
        }catch{
            print("can not fetch any data")
        }
        
        return rating
        
    }
    
    func getRatingByUserName(name : String) -> Rating {
        
        var rating = Rating()
        let fReq = NSFetchRequest<NSFetchRequestResult>(entityName: "Rating")
        fReq.predicate = NSPredicate(format: "name == %@", name)
        fReq.fetchLimit = 1
        
        do{
            let ratingsSaved = try context?.fetch(fReq) as! [Rating]
            if(ratingsSaved.count != 0){
                rating = ratingsSaved.first as! Rating
                
            }else{
                print("data not found")
            }
            
            
        }catch{
            
        }
        return rating
    }
    
    
    func updateRating(user: String,room: Int32,gym: Int32){
        
        var rating = Rating()
        var fetchRequest = NSFetchRequest<NSManagedObject>.init(entityName: "Rating")
        fetchRequest.predicate = NSPredicate(format: "name == %@", user)
        
        do{
            let ratingsSaved = try context?.fetch(fetchRequest)
            if(ratingsSaved?.count != 0){
                rating = ratingsSaved?.first as! Rating
                
                rating.room = room
                rating.gym = gym
                
                try context?.save()
                print("data update")
            }
            
            
        }catch{
            
        }
        
        
    }
    
    func deleteRating(user: String){
        var fetchRequest = NSFetchRequest<NSManagedObject>.init(entityName: "Rating")
        fetchRequest.predicate = NSPredicate(format: "name == %@", user)
        
        do{
            let ratingsSaved = try context?.fetch(fetchRequest)
            context?.delete(ratingsSaved?.first as! Rating)
            try context?.save()
            print("Data deleted")
        }catch{
            
        }
    }
    
    
    
    
    func addUser(name: String,email :String,password : String) {
        
        let user = NSEntityDescription.insertNewObject(forEntityName: "User", into: context!) as! User
        user.name = name
        user.email = email
        user.password = password
        
        do{
            print(try context?.save())
        }
        catch{
            print("user not saved")
        }
        
    }
    
    func getAllUsers() -> [User]
    {
        var users = [User]()
        var fReq = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
        do{
            users = try context?.fetch(fReq) as! [User]
        }catch{
            print("can not fetch any data")
        }
        
        return users
    }
    
    
    func getUser(name: String) -> User{
         var user = User()
        let fReq = NSFetchRequest<NSFetchRequestResult>.init(entityName: "User")
        fReq.predicate = NSPredicate(format: "name == %@", name)
        fReq.fetchLimit = 1
        
        
        do{
            let usersSaved = try context?.fetch(fReq) as! [User]
            if(usersSaved.count != 0){
                user = usersSaved.first as! User
                
            }else{
                print("data not found")
            }
        }catch{
            
        }
        
        return user
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source