• NSPersistentContainer-Una strana classe con tutte le funzionalità per lavorare con i dati di base chiamati Core Data stack.
  • NSManagedObjectContext-spazio per generare, archiviare e recuperare i dati.Eseguire operazioni da questo oggetto. C’è una proprietà chiamata viewContext all’interno di nspersisitentcontainer, quindi non devi farlo da solo.
  • NSFetchRequest-L’oggetto che devi creare per ottenere i dati.
  • NSEntityDescription-Entityののクラス。Entityは、*.L’entità nel file xcdatamodeld.
  • DataController-Una classe personalizzata per gestire quanto sopra together.It sarà spiegato di seguito.

(per riferimento) Classi che devono essere toccate prima di iOS 10

  • NSPersistentStoreCoordinator – una persona che dispone di una memoria (chiamata archivio persistente) per memorizzare i dati e il contesto dell’oggetto gestito menzionato sopra.
  • NSPersistentStoreCoordinator-Una persona che dispone di un archivio (chiamato archivio persistente) per memorizzare i dati e il contesto oggetto gestito di cui sopra.
  • NSPersistentStoreCoordinator-una persona che dispone di un archivio (chiamato archivio persistente) per memorizzare i dati e il contesto oggetto gestito di cui sopra.
  • NSPersistentStoreCoordinator-una persona che dispone di un archivio (chiamato archivio persistente) per memorizzare i dati e il contesto oggetto gestito di cui sopra.
  • NSManagedObjectModel – Una classe che gestisce un insieme di entità.
  • politica

    Penso che sarebbe più facile da gestire se si crea una classe chiamata

    DataController e si completa tutto in esso.
    Se si seleziona “Usa dati di base” quando si crea un nuovo progetto, AppDelegate.In swift, i Dati principali relativi codice viene aggiunto, ma ha accesso AppDelegate uno per uno, ed è fonte di confusione mista con il codice originale dell’AppDelegate, così è scritto nel documento che è meglio mettere insieme in una classe (vedi qui)

    inizializzazione

    DataController inizializzazione della classe

    DataController inizializzazione della classe

    DataController inizializzazione della classe

    DataController inizializzazione della classe

    DataController inizializzazione della classe

    DataController inizializzazione della classenizializzazione assomiglia a questo:"DataModel" è diverso per ogni progetto, in modo da modificare di conseguenza.In particolare, l’estensione .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() } } // 以下もっと追加していくよー}

    Questa è la tempistica per generare DataController, ma proverò all’inizio di AppDelegate per ora.

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

    Crea e salva oggetto gestito

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

    sottoclasse NSManagedObject

    Le sottoclassi consentono l’accesso diretto alle proprietà (attributi).
    In Xcode 9, viene creato automaticamente quando si aggiunge Entità, quindi potrebbe non essere necessario scriverlo da soli a meno che non si esegua un’elaborazione speciale.

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

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

    carica l’istanza NSManagedObject

    Crea l’oggetto NSFetchRequest e imposta il contesto.Basta chiamare 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 }

    filtra il risultato

    let employeesFetch = ... Aggiungilo dopo questo per ottenere il risultato filtrato.

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

    Oltre a restringere il risultato, è anche possibile specificare di restituire un dizionario invece di NSManagedObject.È inoltre possibile specificare che il Dizionario contiene solo determinate proprietà dell’entità.

    Creazione e modifica di oggetti gestiti personalizzati

    In Xcode 8, iOS 10 e versioni successive, quando si crea un modello di dati di base in Xcode, viene generata automaticamente una sottoclasse o un’estensione di NSManagedObject.Questi file non sono inclusi nel progetto e vengono creati al momento della compilazione (vedi qui).

    codicegen_2x. png

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato.