• NSPersistentContainer – een vreemde klasse met alle functies voor het werken met Core Data genaamd Core Data stack.
  • NSManagedObjectContext-spatie om gegevens te genereren, op te slaan en op te halen.Bewerkingen uitvoeren vanaf Dit object. Er is een eigenschap genaamd viewContext binnen nspersisitentcontainer, dus je hoeft het niet zelf te maken.
  • NSFetchRequest – het object dat u moet maken om de gegevens te verkrijgen.
  • NSEntityDescription-Entityy van het recht op informatieRecht op*.De entiteit in het xcdatamodeld-bestand.
  • DataController – een aangepaste klasse om het bovenstaande af te handelen together.It hieronder wordt uitgelegd.

(ter referentie) klassen die moeten worden aangeraakt voordat iOS 10

  • NSPersistentStoreCoordinator – een persoon die een opslag heeft (Persistent store genaamd) om gegevens en de hierboven genoemde beheerde ObjectContext op te slaan.
  • NSPersistentStoreCoordinator – een persoon die een opslag heeft (Persistent store genaamd) om gegevens en de hierboven genoemde beheerde ObjectContext op te slaan.
  • NSPersistentStoreCoordinator – een persoon die een opslag heeft (Persistent store genaamd) om gegevens en de hierboven genoemde beheerde ObjectContext op te slaan.
  • NSPersistentStoreCoordinator – een persoon die een opslag heeft (Persistent store genaamd) om gegevens en de hierboven genoemde beheerde ObjectContext op te slaan.
  • NSManagedObjectModel-een klasse die een set entiteiten beheert.
  • beleid

    Ik denk dat het makkelijker te hanteren zou zijn als je een klasse genaamd

    DataController maakt en het allemaal compleet maakt.
    Als u “Use Core Data” aanvinkt bij het maken van een nieuw project, AppDelegate.In swift, Core Data-gerelateerde code is toegevoegd, maar het is om toegang te krijgen tot AppDelegate één voor één, en het is verwarrend gemengd met de oorspronkelijke code van AppDelegate, dus het is geschreven in het document dat het beter is om het samen te stellen in een class (zie hier)

    initialiseren

    DataController klasse initialisatie

    DataController klasse initialisatie

    DataController klasse initialisatie

    DataController klasse initialisatie

    DataController klasse initialisatie

    DataController klasse initialisatiee initialisatie ziet er als volgt uit:"DataModel" is verschillend voor elk project, dus veranderen dienovereenkomstig.In het bijzonder de extensie .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() } } // 以下もっと追加していくよー}

    Dit is de timing om DataController te genereren, maar Ik zal het proberen aan het begin van AppDelegate voor nu.

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

    beheerd object

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

    subklassen nsmanagedobject

    subklassen staan directe toegang tot eigenschappen (attributen) toe.
    in Xcode 9 wordt het automatisch aangemaakt wanneer u entiteit toevoegt, dus het kan zijn dat u het niet zelf hoeft te schrijven tenzij u een speciale verwerking uitvoert.

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

    Save nsmanagedobject instance

    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 instantie Laden

    Nsfetchrequest object aanmaken en context instellen.Bel gewoon fetch ().

    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 }

    filteren van het resultaat

    let employeesFetch = ...voeg het na dit toe om het gefilterde resultaat te krijgen.

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

    naast het verkleinen van het resultaat, kunt u ook opgeven om een woordenboek terug te geven in plaats van NSManagedObject.U kunt ook opgeven dat het woordenboek alleen bepaalde eigenschappen van de entiteit bevat.

    aangepaste beheerde objecten maken en wijzigen

    in Xcode 8, iOS 10 en hoger, wanneer u een Kerngegevensmodel in Xcode maakt, wordt automatisch een subklasse of extensie van NSManagedObject gegenereerd.Deze bestanden zijn niet opgenomen in het project en worden gemaakt tijdens de bouwtijd (zie hier).

    CodeGen_2x. png

    Geef een antwoord

    Het e-mailadres wordt niet gepubliceerd.