• NSPersistentContainer – o clasă ciudată cu toate caracteristicile pentru lucrul cu date de bază numite Core Data stack.NSManagedObjectContext-spațiu pentru a genera, stoca și prelua date.Efectuați operații din acest obiect. Există o proprietate numită viewContext în interiorul nspersisitentcontainer, deci nu trebuie să o faceți singur.NSFetchRequest-obiectul pe care trebuie să-l creați pentru a obține datele.
  • NSEntityDescription-entityEntity*.Entitatea din fișierul xcdatamodeld.
  • DataController – o clasă personalizată pentru a gestiona cele de mai sus together.It vor fi explicate mai jos.

(pentru referință) clase care trebuie atinse înainte de iOS 10

  • NSPersistentStoreCoordinator – o persoană care are un spațiu de stocare (numit magazin Persistent) pentru a stoca date și contextul obiectului gestionat menționat mai sus.
  • NSPersistentStoreCoordinator – o persoană care are un spațiu de stocare (numit magazin Persistent) pentru a stoca date și contextul obiect gestionat menționat mai sus.
  • NSPersistentStoreCoordinator – o persoană care are un spațiu de stocare (numit magazin Persistent) pentru a stoca date și contextul obiect gestionat menționat mai sus.
  • NSPersistentStoreCoordinator – o persoană care are un spațiu de stocare (numit magazin Persistent) pentru a stoca date și contextul obiect gestionat menționat mai sus.
  • NSManagedObjectModel – o clasă care gestionează un set de entități.
  • politică

    Cred că ar fi mai ușor de manevrat dacă creați o clasă numită

    DataController și faceți totul complet în ea.
    Dacă bifați „Utilizați datele de bază” atunci când creați un nou proiect, AppDelegate.În swift, se adaugă codul de bază legate de date, dar trebuie să acceseze AppDelegate unul câte unul, și este confuz amestecat cu codul original al AppDelegate, așa că este scris în document că este mai bine să-l pună împreună într-o clasă (A se vedea aici)

    inițializare

    inițializare clasa DataController

    inițializare clasa datacontroller

    inițializare clasa datacontroller

    inițializare clasa DataController

    inițializarea clasei Datacontroller

    inițializarea clasei datacontroller

    inițializarea clasei datacontrollernițializarea arată astfel: "DataModel" este diferită pentru fiecare proiect, deci schimbați-l în consecință.Mai exact, extensia .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() } } // 以下もっと追加していくよー}

    acesta este momentul pentru a genera DataController, dar voi încerca la începutul AppDelegate de acum.

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

    creați și salvați obiectul gestionat

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

    subclasele NSManagedObject

    permit accesul direct la proprietăți (atribute).
    în Xcode 9, Acesta este creat automat atunci când adăugați entitate, deci este posibil să nu trebuiască să îl scrieți singur decât dacă faceți o prelucrare specială.

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

    Salvați instanța NSManagedObject

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

    încărcați instanța NSManagedObject

    creați obiectul NSFetchRequest și setați contextul.Doar apel 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 }

    filtrarea rezultatului

    let employeesFetch = ... adăugați-l după aceasta pentru a obține rezultatul filtrat.

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

    În plus față de îngustarea jos rezultatul, puteți specifica, de asemenea, să se întoarcă un dicționar în loc de NSManagedObject.De asemenea, puteți specifica că dicționarul conține numai anumite proprietăți ale entității.

    crearea și modificarea obiectelor gestionate personalizate

    în Xcode 8, iOS 10 și versiuni ulterioare, atunci când creați un model de date de bază în Xcode, se generează automat o subclasă sau o extensie a NSManagedObject.Aceste fișiere nu sunt incluse în proiect și sunt create la momentul construirii (vezi AICI).

    CodeGen_2x.png

    Lasă un răspuns

    Adresa ta de email nu va fi publicată.