• NSPersistentContainer to dziwna Klasa ze wszystkimi funkcjami do pracy z danymi podstawowymi, zwana stosem danych podstawowych.
  • NSManagedObjectContext-przestrzeń do generowania, przechowywania i pobierania danych.Wykonuj operacje na tym obiekcie. Wewnątrz nspersisitentcontainer znajduje się właściwość viewContext, więc nie musisz jej tworzyć samodzielnie.
  • NSFetchRequest to obiekt, który musisz utworzyć, aby uzyskać dane.
  • NSEntityDescription-Entityのををすすクラス.Entityは、*.Encja w pliku xcdatamodeld.
  • DataController jest niestandardową klasą do wspólnego przetwarzania powyższych.Zostanie to wyjaśnione poniżej.

(w celach informacyjnych) klasy, które należy dotknąć przed iOS 10

  • nspersistentstorecoordinator to osoba, która ma pamięć (zwaną trwałą pamięcią) do przechowywania danych i kontekstu obiektu zarządzanego wspomnianego powyżej.
  • NSPersistentStoreCoordinator – osoba, która ma pamięć masową (zwaną trwałą pamięcią masową) do przechowywania danych i kontekstu obiektu zarządzanego wspomnianego powyżej.
  • NSPersistentStoreCoordinator – osoba, która ma pamięć masową (zwaną trwałą pamięcią masową) do przechowywania danych i kontekstu obiektu zarządzanego wspomnianego powyżej.
  • NSPersistentStoreCoordinator-osoba posiadająca repozytorium (zwane trwałym magazynem) do przechowywania danych i kontekstu obiektu zarządzanego wspomnianego powyżej.
  • NSManagedObjectModel-Klasa zarządzająca zestawem encji.
  • Polityka

    Myślę, że łatwiej byłoby sobie z tym poradzić, gdybyś utworzył klasę o nazwie

    DataController i sprawił, że wszystko było w niej kompletne.
    Jeśli zaznaczysz pole wyboru „Użyj podstawowych danych” podczas tworzenia nowego projektu, AppDelegate.W swift dodany kod, związane z podstawowymi danymi, ale on powinien udać się do AppDelegate, jeden po drugim, i to jest mylące, mieszany z kodem źródłowym AppDelegate, dlatego w dokumencie jest napisane, że lepiej połączyć je w klasy (patrz Tutaj)

    inicjalizacja

    Inicjalizacja klasy DataController

    Inicjalizacja klasy DataController

    Inicjalizacja klasy DataController

    Inicjalizacja klasy DataController

    Inicjalizacja klasy DataController

    Inicjalizacja klasy DataController

    Inicjalizacja klasy DataControllernicjalizacja wygląda w następujący sposób:"DataModel" różni się dla każdego projektu, dlatego też zmień go odpowiednio.W szczególności rozszerzenie .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() } } // 以下もっと追加していくよー}

    Teraz jest dobry moment, aby utworzyć DataController, ale spróbuję na początku AppDelegate.

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

    Utwórz i zapisz zarządzany obiekt

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

    podklasy NSManagedObject

    podklasy zapewniają bezpośredni dostęp do właściwości (atrybutów).
    w Xcode 9 jest on automatycznie tworzony po dodaniu encji, więc może nie być konieczne samodzielne napisanie go, chyba że wykonasz specjalne przetwarzanie.

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

    Zapisz instancję NSManagedObject

    Kontroler danych.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)”) } }}

    załaduj instancję NSManagedObject

    Utwórz obiekt NSFetchRequest i ustaw kontekst.Wystarczy wywołać funkcję 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 }

    filtrowanie wyniku

    let employeesFetch = … dodaj go po tym, aby uzyskać filtrowany wynik.

    Kontroler danych.swift
    let firstName = „Trevor”employeesFetch.predicate = NSPredicate(format: „firstName == %@”, firstName)

    oprócz zawężenia wyniku można również określić, aby zwrócić słownik zamiast NSManagedObject.Możesz także określić, że słownik zawiera tylko określone właściwości encji.

    Tworzenie i modyfikowanie niestandardowych obiektów zarządzanych

    w Xcode 8, iOS 10 i nowszych podczas tworzenia podstawowego modelu danych w Xcode automatycznie tworzy podklasę lub rozszerzenie NSManagedObject.Pliki te nie są zawarte w projekcie i są tworzone podczas kompilacji (patrz tutaj).

    CodeGen_2x.png

    Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany.