• NSPersistentContainer – en merkelig klasse med alle funksjonene for å jobbe Med Kjernedata kalt Core data stack.
  • NSManagedObjectContext-plass til å generere, lagre og hente data.Utfør operasjoner fra dette objektet. Det er en egenskap som heter viewContext inne i nspersisitentcontainer, så du trenger ikke å gjøre det selv.
  • NSFetchRequest-objektet du må opprette for å få dataene.
  • NSEntityDescription – Entityの詳細を表すクラス 。Entityは 、*.Enheten i filen xcdatamodeld.
  • DataController-en tilpasset klasse for å håndtere ovennevnte together.It vil bli forklart nedenfor.

(for referanse) Klasser som må berøres før iOS 10

  • NSPersistentStoreCoordinator-en person som har en lagring (kalt Vedvarende butikk) for å lagre data og Den Administrerte Objektkonteksten nevnt ovenfor.
  • NSPersistentStoreCoordinator-en person som har en lagring (Kalt Vedvarende butikk) for å lagre data og Den Administrerte Objektkonteksten nevnt ovenfor.
  • NSPersistentStoreCoordinator-en person som har en lagring (Kalt Vedvarende butikk) for å lagre data og Den Administrerte Objektkonteksten nevnt ovenfor.
  • NSPersistentStoreCoordinator-en person som har en lagring (Kalt Vedvarende butikk) for å lagre data og Den Administrerte Objektkonteksten nevnt ovenfor.
  • NSManagedObjectModel-en klasse som administrerer et Sett Med Enheter.
  • politikk

    Jeg tror det ville være lettere å håndtere hvis du lager en klasse som heter

    DataController og gjør alt komplett i det.
    hvis du sjekker «Bruk Kjernedata» når du oppretter et nytt prosjekt, AppDelegate.I swift Er Kjernedatarelatert kode lagt til, men Den må få Tilgang Til AppDelegate en etter En, og det er forvirrende blandet Med den opprinnelige koden Til AppDelegate, så det er skrevet i dokumentet at det er bedre å sette det sammen i en klasse (se her)

    initialisering

    datacontroller class initialization

    DataController class initialization

    DataController class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initializationnitialiseringen ser slik ut:"DataModel" Er Forskjellig For Hvert Prosjekt, så endre det tilsvarende.Spesielt utvidelsen .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() } } // 以下もっと追加していくよー}

    Dette er tidspunktet for å generere DataController, men jeg vil prøve i begynnelsen Av AppDelegate for nå.

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

    Opprett Og lagre Administrert objekt

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

    underklasse nsmanagedobject

    Underklasser gir direkte tilgang til egenskaper (attributter).
    I Xcode 9 opprettes den automatisk når Du legger Til Enhet, så du må kanskje ikke skrive det selv med mindre du gjør spesiell behandling.

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

    Lagre nsmanagedobject-forekomst

    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)") } }}

    last Inn nsmanagedobject-forekomst

    Opprett nsfetchrequest-objekt og angi kontekst.Bare ring 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 }

    filtrer resultatet

    let employeesFetch = ... Legg det til etter dette for å få det filtrerte resultatet.

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

    i tillegg til å begrense resultatet, kan du også angi å returnere En Ordbok i stedet For NSManagedObject.Du kan også angi At Ordlisten bare inneholder bestemte egenskaper for Enheten.

    Opprette og endre Egendefinerte Administrerte objekter

    I Xcode 8, iOS 10 og nyere, når du oppretter En Kjernedatamodell i Xcode, genereres en underklasse eller utvidelse Av NSManagedObject automatisk.Disse filene er ikke inkludert i prosjektet og er opprettet På Byggetid (se her).

    CodeGen_2x.png

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert.