'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 |
|---|
