Я искал дни о том, как работать с одним или несколькими отношениями. Но я не могу понять.Основные данные от одного до многих отношений в swift
Я работаю над приложением, которое хранит оценки предмета. Таким образом, у одного субъекта есть много отношений с оценками. Все данные в настоящее время хранятся в массиве.
var vakken: [(naam:String, voorkeurGemiddelde:Double, wegingGemiddelde:Double, cijfer:[Double], weging:[Double], gemiddelde:Double)] = []
В тех случаях, когда [Double] - Cijfer и wege - являются признаками класса.
Я в настоящее время имеют следующие для сохранения данных:
let context = AppDelegate().managedObjectContext
// Create subject
let entitySubject = NSEntityDescription.entityForName("Subject", inManagedObjectContext: context)
let Subject = NSManagedObject(entity: entitySubject!, insertIntoManagedObjectContext: context)
// Populate subject
Subject.setValue(vakken.last!.naam, forKey: "name")
Subject.setValue(vakken.last!.voorkeurGemiddelde, forKey: "voorkeurGemiddelde")
Subject.setValue(vakken.last!.wegingGemiddelde, forKey: "wegingNP")
Subject.setValue(vakken.last!.gemiddelde, forKey: "gemiddelde")
for var j = 0; j < vakken.last!.cijfer.count-1; j++ {
let Grade = NSEntityDescription.insertNewObjectForEntityForName("Grade", inManagedObjectContext: context)
Grade.setValue(vakken.last!.cijfer[j], forKey: "cijfer")
Grade.setValue(vakken.last!.weging[j], forKey: "weging")
Subject.setValue(NSSet(object: Grade), forKey: "grade")
}
do{
try context.save()
}catch{
print("error")
}
Я использую данные в Tableview. В некоторых учебниках я видел, что использование: var vakken = [NSManagedObject]()
, а затем использовать его в виде таблицы.
1. Но возможно ли это также с моделью, которую я имею, и использовать ее?
Сначала я решил просто сохранить данные, когда приложение завершится, поэтому у меня будет код в делетете приложения, а затем просто извлеките его, когда приложение запустится.
2. Но как я могу получить массив в appdelegate, и это было бы разумно?
И для извлечения данных, у меня есть это:
let fetchRequest = NSFetchRequest(entityName: "Subject")
// // Add Sort Descriptor
// let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
// fetchRequest.sortDescriptors = [sortDescriptor]
let context = Appdelegate().managedObjectContext
// Execute Fetch Request
do {
let result = try context.executeFetchRequest(fetchRequest)
print(result)
} catch {
let fetchError = error as NSError
print(fetchError)
}
3. Но как я мог бы получить от результата моего массива или назад, если я использую NSManagedObject как я могу относиться к атрибутам и в большинстве в частности, оценки.
Я также сортирую массив по имени, который может быть A-Z или Z-A, и я сортирую по среднему значению, которое может быть 10-1 или 1-10. У меня есть код для сортировки в моем массиве.
4. Но я не знаю, как сортировать это с основными данными.
Я также видел учебник, в котором они сделали класс для атрибутов link. Так что я сделал один мой сам:
import UIKit
import CoreData
import Foundation
class Subject: NSManagedObject {
@NSManaged var gemiddelde: Double
@NSManaged var name: String
@NSManaged var voorkeurGemiddelde: Double
@NSManaged var wegingNP: Double
@NSManaged var Grades: NSSet
}
class Grade: NSManagedObject {
@NSManaged var cijfer: Double
@NSManaged var weging: Double
@NSManaged var subject: Subject
}
extension Subject {
func addTagObject(value:Grade) {
let items = self.mutableSetValueForKey("grade");
items.addObject(value)
}
func removeTagObject(value:Grade) {
let items = self.mutableSetValueForKey("grade");
items.removeObject(value)
}
}
5. Но я не знаю, если мне нужно, ни как его использовать?
Если у вас есть какие-либо советы, советы, знайте хорошие учебники или знаете один из этих вопросов. Ваша помощь будет оценена по достоинству.
Если вам нужна дополнительная информация, просто дайте мне знать. :)
Update:
У меня есть этот код, чтобы получить объект предметной ведьмы щелкает.
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = segue.destinationViewController as! VakTableViewController
controller.vak = object as! Subject
}
И это код на приемном конце:
var vak: Subject! {
didSet {
// Update the view.
cijfers = vak.valueForKeyPath("grades.cijfer")!.allObjects as! [Double]
wegingen = vak.valueForKeyPath("grades.weging")!.allObjects as! [Double]
self.tableView.reloadData()
}
}
var cijfers: Array<Double>!
var wegingen: Array<Double>!
6. Но как я могу удалить на из классов?
Я попытался это:
// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
if cijfers.count != 1 {
let entityGrade = NSEntityDescription.entityForName("Grade", inManagedObjectContext: mangedobjectcontext)
let grade = Grade(entity: entityGrade!, insertIntoManagedObjectContext: mangedobjectcontext)
grade.cijfer = cijfers[indexPath.row]
grade.weging = wegingen[indexPath.row]
vak.removeGradeObject(grade)
do{
try mangedobjectcontext.save()
}catch{
print("error")
}
cijfers.removeAtIndex(indexPath.row)
wegingen.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
print(vak.valueForKeyPath("grades.cijfer")?.allObjects)
}
}
}
Но это не работает.
7. И как я могу сохранить vak (subject) в контексте, когда я просто изменяю собственную переменную?
так: vak.gemiddelde = newgemiddelde
Я не думаю, что вы намерены использовать AppDelegate(), поскольку это приведет к инициализации нового экземпляра вашего AppDelegate, скорее, я думаю, вы имеете в виду «let appDelegate = UIApplication.sharedApplication(). Делегировать как! AppDelegate ", так как это получит текущий экземпляр AppDelegate вашего приложения. – beyowulf
Appdelegate() - это функция, возвращающая appdelegate. Так что не беспокойтесь. – Cing