• NSPersistentContainer – Eine seltsame Klasse mit allen Funktionen für die Arbeit mit Core Data namens Core Data Stack.
  • NSManagedObjectContext – Platz zum Generieren, Speichern und Abrufen von Daten.Führen Sie Operationen von diesem Objekt aus aus. Es gibt eine Eigenschaft namens ViewContext in nspersisitentcontainer , sodass Sie sie nicht selbst erstellen müssen.
  • NSFetchRequest – Das Objekt, das Sie erstellen müssen, um die Daten abzurufen.
  • NSEntityDescription – Entityの詳細グ表すクラス。Entity1、*.Die Entität in der xcdatamodeld-Datei.
  • DataController – Eine benutzerdefinierte Klasse, um die oben genannten zu behandeln together.It wird im Folgenden erläutert.

(als Referenz) Klassen, die vor iOS 10 berührt werden müssen

  • NSPersistentStoreCoordinator – eine Person, die über einen Speicher (Persistent Store genannt) verfügt, um Daten und den oben genannten Kontext für verwaltete Objekte zu speichern.
  • NSPersistentStoreCoordinator – Eine Person, die über einen Speicher (Persistent Store genannt) verfügt, um Daten und den oben genannten Kontext für verwaltete Objekte zu speichern.
  • NSPersistentStoreCoordinator – Eine Person, die über einen Speicher (Persistent Store genannt) verfügt, um Daten und den oben genannten Kontext für verwaltete Objekte zu speichern.
  • NSPersistentStoreCoordinator – Eine Person, die über einen Speicher (Persistent Store genannt) verfügt, um Daten und den oben genannten Kontext für verwaltete Objekte zu speichern.
  • NSManagedObjectModel – Eine Klasse, die eine Reihe von Entitäten verwaltet.
  • Richtlinien

    Ich denke, es wäre einfacher zu handhaben, wenn Sie eine Klasse namens

    DataController erstellen und alles darin vervollständigen.
    Wenn Sie beim Erstellen eines neuen Projekts „Kerndaten verwenden“ aktivieren, AppDelegate.In Swift wird Core Data-bezogener Code hinzugefügt, aber er muss nacheinander auf AppDelegate zugreifen, und er ist verwirrend gemischt mit dem ursprünglichen Code von AppDelegate, so dass es im Dokument geschrieben ist, dass es besser ist, es in eine Klasse zusammenzufassen (siehe hier)

    Initialisierung

    Initialisierung der DataController-Klasse

    Initialisierung der DataController-Klasse

    Initialisierung der DataController-Klasse Initialisierung der DataController-Klasse

    Initialisierung der DataController-Klasse

    Initialisierung der DataController-Klasseie Initialisierung sieht folgendermaßen aus:"DataModel" ist für jedes Projekt unterschiedlich.Insbesondere die Erweiterung .xcdatamodeld .

    DataController.swift
    import UIKitimport CoreDataclass DataController: NSObject { var persistentContainer: NSPersistentContainer! init(completionClosure: @escaping () -> ()) { persistentContainer = NSPersistentContainer(name: "DataModel") persistentContainer.loadPersistentStores() { (description, error) in if let error = error { fatalError("Failed to load Core Data stack: \(error)") } completionClosure() } } // 以下もっと追加していくよー}

    Dies ist der Zeitpunkt zum Generieren von DataController , aber ich werde es vorerst zu Beginn von AppDelegate versuchen.

    Appdelegieren.swift
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: ?) -> Bool { dataController = DataController() { // なんかしたいことあれば } //... return true}

    Verwaltetes Objekt erstellen und speichern

    DataController.swift
    func createEmployee() -> EmployeeMO { let context = persistentContainer.viewContext let employee = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: context) as! EmployeeMO return employee}

    Unterklasse NSManagedObject

    Unterklassen ermöglichen den direkten Zugriff auf Eigenschaften (Attribute).
    In Xcode 9 wird es automatisch erstellt, wenn Sie eine Entität hinzufügen, sodass Sie es möglicherweise nicht selbst schreiben müssen, es sei denn, Sie führen eine spezielle Verarbeitung durch.

    class EmployeeMO: NSManagedObject { @NSManaged var name: String?}

    NSManagedObject Instanz speichern

    DataController.swift
    func saveContext() { let context = persistentContainer.viewContext if context.hasChanges { do { try context.save() } catch { // Replace this implementation with code to handle the error appropriately. // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. let nserror = error as NSError fatalError("Unresolved error \(nserror), \(nserror.userInfo)") } }}

    NSManagedObject Instanz laden

    NSFetchRequest Objekt erstellen und Kontext festlegen.Rufen Sie einfach fetch() auf.

    DataController.swift
    func fetchEmployees() -> { let context = persistentContainer.viewContext let employeesFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee") do { let fetchedEmployees = try context.fetch(employeesFetch) as! return fetchedEmployees } catch { fatalError("Failed to fetch employees: \(error)") } return }

    Filtern des Ergebnisses

    let employeesFetch = ... Fügen Sie es danach hinzu, um das gefilterte Ergebnis zu erhalten.

    DataController.swift
    let firstName = "Trevor"employeesFetch.predicate = NSPredicate(format: "firstName == %@", firstName)

    Zusätzlich zur Eingrenzung des Ergebnisses können Sie auch angeben, dass anstelle von NSManagedObject ein Wörterbuch zurückgegeben werden soll.Sie können auch angeben, dass das Wörterbuch nur bestimmte Eigenschaften der Entität enthält.

    Erstellen und Ändern benutzerdefinierter verwalteter Objekte

    Wenn Sie in Xcode 8, iOS 10 und höher ein Kerndatenmodell in Xcode erstellen, wird automatisch eine Unterklasse oder Erweiterung von NSManagedObject generiert.Diese Dateien sind nicht im Projekt enthalten und werden zur Erstellungszeit erstellt (siehe hier ).

    CodeGen_2x.png

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.