• NSPersistentContainer – en konstig klass med alla funktioner för att arbeta med kärndata som kallas Core Data stack.
  • NSManagedObjectContext-utrymme för att generera, lagra och hämta data.Utför operationer från det här objektet. Det finns en egenskap som heter viewContext inuti nspersisitentcontainer, så du behöver inte göra det själv.
  • NSFetchRequest-objektet du behöver skapa för att få data.
  • NSEntityDescription-Entity UkrainianEntityubbi.*.Enheten i filen xcdatamodeld.
  • DataController-en anpassad klass för att hantera ovanstående together.It kommer att förklaras nedan.

(för referens) klasser som måste beröras före iOS 10

  • NSPersistentStoreCoordinator – en person som har en Lagring (kallad Persistent store) för att lagra data och det hanterade Objektkontexten som nämns ovan.
  • NSPersistentStoreCoordinator – en person som har en Lagring (kallad Persistent store) för att lagra data och det hanterade Objektkontexten som nämns ovan.
  • NSPersistentStoreCoordinator – en person som har en Lagring (kallad Persistent store) för att lagra data och det hanterade Objektkontexten som nämns ovan.
  • NSPersistentStoreCoordinator – en person som har en Lagring (kallad Persistent store) för att lagra data och det hanterade Objektkontexten som nämns ovan.
  • NSManagedObjectModel – en klass som hanterar en uppsättning enheter.
  • policy

    Jag tror att det skulle vara lättare att hantera om du skapar en klass som heter

    DataController och gör allt komplett i det.
    om du markerar ”Använd kärndata” när du skapar ett nytt projekt, AppDelegate.I swift läggs Kärndatarelaterad kod till, men den måste komma åt AppDelegate en efter en, och det är förvirrande blandat med den ursprungliga koden för AppDelegate, så det är skrivet i dokumentet att det är bättre att sätta ihop det i en klass (se här)

    initialisering

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization

    datacontroller class initialization nitialiseringen ser ut så här: "DataModel" är olika för varje projekt, så ändra det i enlighet därmed.Specifikt förlängningen .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() } } // 以下もっと追加していくよー}

    detta är tidpunkten för att generera DataController, men jag kommer att försöka i början av AppDelegate för nu.

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

    skapa och spara hanterat objekt

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

    subclassing NSManagedObject

    underklasser tillåter direkt åtkomst till Egenskaper (attribut).
    i Xcode 9 skapas det automatiskt när du lägger till enhet, så du kanske inte behöver skriva det själv om du inte gör speciell behandling.

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

    spara nsmanagedobject instans

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

    ladda nsmanagedobject-instans

    skapa nsfetchrequest-objekt och ställ in sammanhang.Ring bara hämta ().

    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 }

    filtrera resultatet

    let employeesFetch = ... Lägg till det efter detta för att få det filtrerade resultatet.

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

    förutom att begränsa resultatet kan du också ange att returnera en ordbok istället för NSManagedObject.Du kan också ange att ordlistan endast innehåller vissa egenskaper hos enheten.

    skapa och ändra anpassade hanterade objekt

    i Xcode 8, iOS 10 och senare, när du skapar en Kärndatamodell i Xcode, genereras en underklass eller förlängning av NSManagedObject automatiskt.Dessa filer ingår inte i projektet och skapas vid byggtiden (se här).

    CodeGen_2x. png

    Lämna ett svar

    Din e-postadress kommer inte publiceras.