Az első lépések a Core Data oktatóanyaggal

ez egy rövidített fejezet a Core Data by Tutorials könyvünkből, amelyet teljesen frissítettek a Swift 4.2 és az iOS 12 számára. Ezt az oktatóanyagot az iOS 12 indító partijának részeként mutatjuk be-élvezd!

Üdvözöljük a Core Data oldalán!

ebben az oktatóanyagban megírja az első alapadat-alkalmazást. Látni fogja, milyen könnyű elkezdeni az Xcode-ban biztosított összes erőforrást, Az indító kódsablonoktól az adatmodell-szerkesztőig.

az elejétől kezdve a földre fogsz menni. A bemutató végére tudni fogja, hogyan kell:

  • modelladatok az Xcode modellszerkesztőjével
  • új rekordok hozzáadása az alapadatokhoz
  • rekordok lekérése az alapadatokból
  • a lekért rekordok megjelenítése táblázatos nézetben.

azt is megtudhatja, hogy a Core Data mit csinál a színfalak mögött, és hogyan léphet kapcsolatba a különböző mozgó darabokkal.

első lépések

nyissa meg az Xcode-ot, és hozzon létre egy új iOS-projektet az egyetlen nézet alkalmazássablon alapján. Nevezze el az alkalmazás találati listáját, és ellenőrizze, hogy az alapadatok használata be van-e jelölve.

Ha bejelöli a Use Core Data mezőt, az Xcode generálni fogja a boilerplate kódot az AppDelegate-ben NSPersistentContainer néven ismert kódhoz.gyors.

a NSPersistentContainer olyan objektumokból áll, amelyek megkönnyítik az információk mentését és visszakeresését az alapadatokból. Ebben a tárolóban van egy objektum, amely az alapadatok állapotának egészét kezeli, egy objektum, amely az adatmodellt képviseli stb.

a standard verem jól működik a legtöbb alkalmazás számára, de az alkalmazásától és annak adatigényeitől függően testreszabhatja a veremet, hogy hatékonyabb legyen.

Megjegyzés: Nem minden Xcode sablonok alatt iOS 6 alkalmazás lehetősége van arra, hogy kezdeni alapadatok. Az Xcode 10-ben csak a Master-Detail alkalmazás és a Single View alkalmazássablonok rendelkeznek az alapadatok használata jelölőnégyzettel.

az ötlet a minta app egyszerű: lesz egy táblázat nézet egy listát a nevek a maga “találati lista”. Neveket adhat hozzá ehhez a listához, és végül az alapadatok segítségével ellenőrizheti, hogy az adatok a munkamenetek között vannak-e tárolva. Nem tűri az erőszak ezen az oldalon, így úgy gondolja, ez az alkalmazás, mint egy kedvencek listáját nyomon követni a barátok is, természetesen!

kattintson a fő.storyboard to nyissa meg az Interface Builder alkalmazásban. Válassza ki a nézetvezérlőt a vásznon, majd ágyazza be egy navigációs vezérlőbe. Az Xcode szerkesztő menüjéből válassza a beágyazást a… .. Főnavigációs vezérlőbe.

kattintson a navigációs vezérlő navigációs sávjára annak kiválasztásához, majd kattintson a nagy címek előnyben részesítése elemre az attribútumok Ellenőrében. Ez a mintaalkalmazásnak olyan címstílust ad, amely megfelel az Apple részvényalkalmazásainak.

ezután húzzon egy Táblázatnézetet az objektumkönyvtárból a nézetvezérlőbe, majd méretezze át úgy, hogy az a teljes nézetet lefedje.

ha még nem nyílt meg, használja a vászon bal alsó sarkában található ikont az Interface Builder dokumentumvázlatának megnyitásához.

Ctrl-húzás a táblázat nézetből a dokumentum vázlatában a szülő nézetbe, majd válassza ki a vezető helyet a biztonságos területkorlátozáshoz:

tegye ezt még háromszor, válassza ki a korlátokat, amelyek a helyet a biztonságos területre, a felső helyet a biztonságos területre, végül az alsó helyet a biztonságos területre korlátozzák. E négy korlátozás hozzáadásával a táblázatnézet kitölti a szülő nézetét.

ezután húzzon egy Sávgombot, és helyezze a nézetvezérlő navigációs sávjára. Végül válassza ki a sáv gomb elemet, majd módosítsa a Rendszer elemet a hozzáadáshoz.

a vászonnak hasonlónak kell lennie az alábbi képernyőképhez:

minden alkalommal, amikor megérinti a Hozzáadás gombot, megjelenik egy szövegmezőt tartalmazó riasztásvezérlő. Innen beírhatja valaki nevét a szövegmezőbe. A Save elemre koppintva menti a nevet, elveti a riasztásvezérlőt, és frissíti a táblázat nézetet, megjelenítve az összes beírt nevet.

de először a nézetvezérlőt kell a táblázatnézet adatforrásává tenni. A vásznon, Ctrl-húzza a táblázat nézetből a navigációs sáv fölötti sárga nézetvezérlő ikonra, az alábbiak szerint, majd kattintson az adatforrás elemre:

abban az esetben, ha kíváncsi, nem kell beállítania a táblázatnézet delegáltját, mivel a cellák megérintése nem indít semmilyen műveletet. Ez nem lesz egyszerűbb, mint ez!

nyissa meg az asszisztens szerkesztőt a Command-Option-Enter megnyomásával vagy az Xcode sáv szerkesztő eszközkészletének középső gombjának kiválasztásával.

Ctrl-húzás a táblázat nézetből a Viewcontrollerre.swift az osztálydefiníción belül egy IBOutletlétrehozásához.

ezután nevezze el az új IBOutlet tulajdonságot tableView, ami a következő sort eredményezi:

@IBOutlet weak var tableView: UITableView!

ezután húzza a CTRL billentyűt a Hozzáadás gombról a Viewcontrollerbe.swift közvetlenül a viewDidLoad() definíció alatt. Ezúttal hozzon létre egy műveletet outlet helyett, megnevezve a metódust addName, típussal UIBarButtonItem:

@IBAction func addName(_ sender: UIBarButtonItem) { }

most hivatkozhat a táblázat nézetre és a sáv gomb elemére a kódban.

ezután beállítja a modellt a táblázat nézethez. Adja hozzá a következő tulajdonságot a Viewcontrollerhez.gyors a tableView IBOutlet:

var names: = 

names egy változtatható tömb, amely a táblázat nézetben megjelenített karakterlánc-értékeket tartja. Ezután cserélje ki a viewDidLoad() megvalósítását a következőre:

override func viewDidLoad() { super.viewDidLoad() title = "The List" tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")}

ez egy címet állít be a navigációs sávon, és regisztrálja a UITableViewCell osztályt a táblázat nézetben.

Megjegyzés: register(_:forCellReuseIdentifier:) garantálja, hogy a táblázatnézet a megfelelő típusú cellát adja vissza, amikor a cella reuseIdentifier a dequeue módszerhez van megadva.

következő, még mindig a Viewcontrollerben.swift, adja hozzá a következő UITableViewDataSource kiterjesztést az osztálydefiníciója aláViewController:

// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return names.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = names return cell }}

ha valaha is dolgozott a UITableView programmal, ennek a kódnak nagyon ismerősnek kell lennie. Először a táblázat sorainak számát adja vissza a names tömbben lévő elemek számaként.

ezután tableView(_:cellForRowAt:) dequeues table view cellák és feltölti őket a megfelelő string a names tömb.

ezután új nevek hozzáadására van szükség, hogy a Táblázat nézet megjelenítse őket. Hajtsa végre a addName IBAction módszert, amelyet korábban Ctrl-húzott be a kódjába:

// Implement the addName IBAction@IBAction func addName(_ sender: UIBarButtonItem) { let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert) let saveAction = UIAlertAction(title: "Save", style: .default) { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else { return } self.names.append(nameToSave) self.tableView.reloadData() } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) alert.addTextField() alert.addAction(saveAction) alert.addAction(cancelAction) present(alert, animated: true)}

minden alkalommal, amikor megérinti a Hozzáadás gombot, Ez a módszer egy UIAlertController – ot jelenít meg egy szövegmezővel és két gombbal: mentés és Mégse.

Mentés beszúrja az aktuális szövegmezőket a names tömbbe, majd újratölti a táblázat nézetet. Mivel a names tömb a táblázat nézetet támogató modell, bármit is ír be a szövegmezőbe, megjelenik a táblázat nézetben.

végül készítsd el és futtasd először az alkalmazást. Ezután érintse meg a Hozzáadás gombot. A riasztásvezérlő így fog kinézni:

adjon hozzá négy vagy öt nevet a listához. Látnia kell valami hasonlót az alábbiakban:

a táblázat nézete megjeleníti az adatokat, a tömb pedig tárolja a neveket, de a nagy dolog hiányzik itt a kitartás. A tömb a memóriában van, de ha kényszeríti az alkalmazást, vagy újraindítja a készüléket, a találati lista törlődik. Az alapadatok kitartást biztosítanak, vagyis tartósabb állapotban tárolhatják az adatokat, így túlélhetik az alkalmazás újraindítását vagy az eszköz újraindítását.

még nem adott hozzá alapvető adatelemeket, így semmi sem maradhat fenn, miután eltávolodott az alkalmazástól. Próbáljuk ki. Nyomja meg a Home gombot, ha fizikai eszközt használ, vagy ennek megfelelő eszközt (Shift + 6 + H), ha a szimulátort használja. Ezzel visszatér a kezdőképernyőn az ismerős alkalmazásrácshoz:

a kezdőképernyőn érintse meg a találati lista ikont, hogy az alkalmazás visszatérjen az előtérbe. A nevek még mindig a képernyőn vannak. Mi történt?

amikor megérinti a Kezdőlap gombot, az előtérben lévő alkalmazás a háttérbe kerül. Amikor ez megtörténik, Az operációs rendszer flash-lefagy mindent, ami jelenleg a memóriában van, beleértve a nevek tömb karakterláncait is. Hasonlóképpen, amikor ideje felébredni és visszatérni az előtérbe, az operációs rendszer visszaállítja azt, ami korábban a memóriában volt, mintha soha nem hagyta volna el.

az Apple bemutatta ezeket az előrelépéseket a multitasking területén az iOS 4 – ben. Zökkenőmentes élményt nyújtanak az iOS felhasználók számára, de ráncot adnak az iOS Fejlesztők perzisztenciájának meghatározásához. Valóban megmaradtak a nevek?

nem, nem igazán. Ha teljesen megölte az alkalmazást a gyors alkalmazásváltóban, vagy kikapcsolta a telefonját, ezek a nevek eltűntek. Ezt is ellenőrizheti. Ha az alkalmazás az előtérben van, írja be a gyors alkalmazásváltót. Ezt úgy teheti meg, hogy duplán megérinti a Kezdőlap gombot, ha eszközén van ilyen, vagy lassan felfelé húzza a képernyő alját, ha iPhone X-et használ.

innen pöccintsen felfelé a HitList alkalmazás pillanatképét az alkalmazás befejezéséhez. Ha iPhone X-en dolgozik, hosszan nyomja meg az alkalmazás pillanatképét, amíg egy piros törlés gomb meg nem jelenik a jobb felső sarokban.

miután eltávolította az alkalmazást az alkalmazásváltóból, az élő memóriában nem lehet nyoma a találati listának (nincs szójáték). Ellenőrizze, hogy a nevek eltűntek-e, ha visszatér a kezdőképernyőre, és megérinti a találati lista ikont az új indítás elindításához.

a flash-fagyasztás és a perzisztencia közötti különbség nyilvánvaló lehet, ha egy ideje dolgozik az iOS rendszerrel, és ismeri a multitasking működését. A felhasználó fejében azonban nincs különbség. A felhasználót nem érdekli, hogy a nevek miért vannak még mindig ott, hogy az alkalmazás a háttérbe került-e és visszatért-e, vagy azért, mert az alkalmazás elmentette és újratöltötte őket. Csak az számít, hogy a nevek még mindig ott vannak, amikor az alkalmazás visszatér!

tehát a perzisztencia valódi próbája az, hogy az adatok még mindig ott vannak-e egy új alkalmazás elindítása után.

az adatok modellezése

most már tudja, hogyan kell ellenőrizni a kitartást, belemerülhet az Alapadatokba. A HitList alkalmazás célja egyszerű: tartsa fenn a beírt neveket, hogy azok friss Alkalmazásindítás után megtekinthetők legyenek.

eddig a pontig egyszerű Régi Swift karakterláncokat használt a nevek memóriában történő tárolásához. Ebben a szakaszban ezeket a karakterláncokat alapvető Adatobjektumokra cseréli le.

az első lépés egy felügyelt objektum modell létrehozása, amely leírja, hogy az alapadatok hogyan reprezentálják a lemezen lévő adatokat.

alapértelmezés szerint a Core Data egy SQLite adatbázist használ állandó tárolóként, így az Adatmodellre gondolhat adatbázis-sémaként.

Megjegyzés: akkor találkoznak a szót sikerült egy kicsit, ha foglalkoznak alapadatok. Ha egy osztály nevében a “kezelt” felirat jelenik meg, például a NSManagedObjectContext mezőben, akkor valószínű, hogy egy alapadat-osztályról van szó. A “kezelt” kifejezés az alapvető adatok kezelését jelenti az alapvető adatok objektumainak életciklusa során.

azonban ne feltételezzük, hogy minden Alapadatosztály tartalmazza a “kezelt”szót. A legtöbb nem. az alapvető Adatosztályok átfogó listáját a dokumentációs böngészőben található Core Data framework hivatkozásban találja.

mivel az alapadatok használatát választotta, az Xcode automatikusan létrehozott egy adatmodell fájlt az Ön számára, és HitList-nek nevezte el.xcdatamodeld.

Nyissa Meg A Találati Listát.xcdatamodeld. Mint látható, az Xcode erőteljes adatmodell-szerkesztővel rendelkezik:

Az adatmodell-szerkesztő sok olyan funkcióval rendelkezik, amelyeket később felfedezhet. Most összpontosítsunk egy egyetlen alapadat-entitás létrehozására.

kattintson az entitás hozzáadása elemre a bal alsó sarokban egy új entitás létrehozásához. Kattintson duplán az új entitásra, és változtassa meg a nevét személyre, így:

kíváncsi lehet, hogy a modellszerkesztő miért használja a Entity. kifejezést, nem egyszerűen egy új osztályt definiált? Amint hamarosan látni fogja, a Core Data saját szókincsével rendelkezik. Itt található néhány olyan kifejezés gyors leírása, amelyekkel gyakran találkozhat:

  • az entitás az alapadatok osztálydefiníciója. A klasszikus példa egy Employee vagy egy Company. Egy relációs adatbázisban egy entitás megfelel egy táblázatnak.
  • az attribútum egy adott entitáshoz kapcsolódó információ. Például egy Employee entitásnak lehetnek attribútumai az alkalmazott name, position és salarytulajdonságaihoz. Egy adatbázisban egy attribútum egy táblázat egy adott mezőjének felel meg.
  • a kapcsolat több entitás közötti kapcsolat. Az Alapadatokban a két entitás közötti kapcsolatokat egy-egy kapcsolatnak nevezzük, míg az egy és sok entitás közötti kapcsolatokat sok-sok kapcsolatnak nevezzük. Például egy Manager-nek lehet sok-sok kapcsolata egy alkalmazottakkal, míg egy Employee – nak általában egy-egy kapcsolata van a vezetőjével.
Megjegyzés: valószínűleg észrevette, hogy az entitások nagyon hasonlítanak az osztályokra. Hasonlóképpen, az attribútumok és a kapcsolatok nagyon hasonlítanak a tulajdonságokra. Mi a különbség? Gondolhat egy alapadat-entitásra osztálydefinícióként, a felügyelt objektumra pedig az osztály példányaként.

most már tudja, mi az attribútum, hozzáadhat egy attribútumot a korábban létrehozott Person objektumhoz. Még mindig a slágerlistán.xcdatamodeld, válassza a Person lehetőséget a bal oldalon, majd kattintson a pluszjelre (+) az attribútumok alatt.

állítsa be az új attribútum nevét, er, name értékre, majd módosítsa a típusát karakterláncra:

az Alapadatokban egy attribútum több adattípus egyikébe tartozhat.

alapadatok mentése

nyissa meg a Viewcontrollert.swift, adja hozzá a következő alapvető adatmodul importálását a UIKit Importálás alá:

import CoreData

ez az Importálás minden, amire szüksége van a Core Data API használatának megkezdéséhez a kódban.

ezután cserélje ki a names tulajdonságdefiníciót a következőre:

var people: = 

karakterláncnevek helyett Personentitásokat tárol, így a táblázatnézet adatmodelljeként szolgáló tömböt átnevezi people – ra. Most a NSManagedObject példányokat tartalmazza, nem pedig egyszerű karakterláncokat.

NSManagedObject az Alapadatokban tárolt egyetlen objektumot jelöli; ezt kell használni az alapadatok állandó tárolójának létrehozásához, szerkesztéséhez, mentéséhez és törléséhez. Amint hamarosan látni fogja, a NSManagedObject egy alakváltó. Az adatmodellben bármely entitás formáját öltheti, bármilyen attribútumot és kapcsolatot hozzárendelve.

mivel megváltoztatja a táblázatnézet modelljét, mindkét korábban végrehajtott adatforrási módszert ki kell cserélnie. Cserélje ki a UITableViewDataSource kiterjesztést a következőre:

// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return people.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let person = people let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = person.value(forKeyPath: "name") as? String return cell }}

ezeknek a módszereknek a legjelentősebb változása tableView(_:cellForRowAt:). Ahelyett, hogy a cellákat a modelltömb megfelelő karakterláncával illesztené össze, most a cellákat a megfelelő NSManagedObjectértékkel illeszti össze.

jegyezze meg, hogyan ragadja meg a nameattribútumot a NSManagedObject – ból. Itt történik:

cell.textLabel?.text = person.value(forKeyPath: "name") as? String

miért kell ezt tenned? Mint kiderült, a NSManagedObject nem tud az adatmodellben megadott name attribútumról, ezért nincs mód arra, hogy közvetlenül hozzáférjen egy tulajdonsághoz. Az alapadatok az érték olvasásának egyetlen módja a kulcs-érték kódolás, amelyet általában KVC-nek neveznek.

megjegyzés: a KVC egy olyan mechanizmus, amely lehetővé teszi az objektum tulajdonságainak közvetett elérését karakterláncok segítségével. Ebben az esetben a KVC a NSMangedObject – ot kissé úgy viselkedik, mint egy szótár futás közben.

a kulcs-érték kódolás minden NSObject – ból örökölt osztály számára elérhető, beleértve a NSManagedObject – ot is. Nem férhet hozzá a tulajdonságokhoz a KVC használatával olyan Swift-objektumon, amely nem ereszkedik le NSObject – ból.

Ezután keresse meg a addName(_:) – et, és cserélje ki a save UIAlertAction – et a következőre:

let saveAction = UIAlertAction(title: "Save", style: .default) { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else { return } self.save(name: nameToSave) self.tableView.reloadData()}

ez a szövegmezőben lévő szöveget átadja egy új, save(name:)nevű metódusnak. Az Xcode panaszkodik, mert save(name:) még nem létezik. Adja hozzá alább addName(_:):

func save(name: String) { guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } // 1 let managedContext = appDelegate.persistentContainer.viewContext // 2 let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)! let person = NSManagedObject(entity: entity, insertInto: managedContext) // 3 person.setValue(name, forKeyPath: "name") // 4 do { try managedContext.save() people.append(person) } catch let error as NSError { print("Could not save. \(error), \(error.userInfo)") }}

ez az, ahol a Core Data rúgások! Itt van, amit a kód csinál:

  1. mielőtt bármit elmenthet vagy letölthet a központi adattárolóból, először meg kell szereznie a kezét egy NSManagedObjectContext. A felügyelt objektumkörnyezetet memórián belüli “scratchpad”-nak tekintheti a felügyelt objektumokkal való munkához.

    gondoljon egy új felügyelt objektum Alapadatokba történő mentésére kétlépcsős folyamatként: először beszúr egy új felügyelt objektumot egy felügyelt objektum környezetbe; ha elégedett, akkor “elkötelezi” a felügyelt objektum környezetének módosításait a lemezre történő mentéshez.

    az Xcode már létrehozott egy felügyelt objektumkörnyezetet az új projekt sablonjának részeként. Ne feledje, hogy ez csak akkor történik meg, ha az elején bejelöli az alapadatok használata jelölőnégyzetet. Ez az alapértelmezett felügyelt objektumkörnyezet az alkalmazásmegbízott NSPersistentContainer tulajdonságaként él. A hozzáféréshez először hivatkozást kap az alkalmazás delegáltjára.

  2. új felügyelt objektumot hoz létre, majd beszúrja a felügyelt objektum környezetébe. Ezt egy lépésben megteheti a NSManagedObject statikus módszerével: entity(forEntityName:in:).

    lehet, hogy kíváncsi vagy, mi a NSEntityDescription. Emlékezzünk korábban, NSManagedObject alakváltó osztálynak hívták, mert bármilyen entitást képviselhet. Az entitásleírás az a darab, amely az adatmodell entitásdefinícióját összekapcsolja a NSManagedObject futásidejű példányával.

  1. a NSManagedObject a kezében a name attribútumot kulcs-érték kódolással állítja be. A KVC kulcsot (ebben az esetbenname) pontosan úgy kell beírnia, ahogy az az adatmodellben megjelenik, különben az alkalmazás futásidőben összeomlik.
  2. a módosításokat person értékre kell végrehajtani, majd lemezre menteni a save meghívásával a felügyelt objektum környezetben. Megjegyzés: a save hibát okozhat, ezért hívja a try kulcsszót egy do-catch blokkon belül. Végül illessze be az új felügyelt objektumot a people tömbbe, hogy megjelenjen, amikor a táblázatnézet újratöltődik.

ez egy kicsit bonyolultabb, mint egy sor karakterlánc használata, de nem túl rossz. Néhány itt található kód, például a felügyelt objektum környezet és entitás lekérése, csak egyszer végezhető el a saját init() vagy viewDidLoad() – ben, majd később újra felhasználható. Az egyszerűség kedvéért ugyanazt a módszert alkalmazza.

Építsd és futtasd az alkalmazást, és adj hozzá néhány nevet a táblázat nézethez:

ha a neveket valóban az alapadatok tárolják, a HitList alkalmazásnak meg kell felelnie a perzisztencia tesztnek. Ha az alkalmazás az előtérben van, lépjen a gyors alkalmazásváltóhoz, majd szüntesse meg.

a Springboard alkalmazásban érintse meg a HitList alkalmazást az új indítás elindításához. Várj, mi történt? A Táblázat nézet üres:

elmentette az Alapadatokba, de egy friss alkalmazás elindítása után a people tömb üres! Ez azért van, mert az adatok a lemezen várnak rád, de még nem mutatod meg őket.

beolvasás az alapadatokból

ahhoz, hogy az állandó tárolóból származó adatokat a felügyelt objektumkörnyezetbe juttassa, le kell töltenie azokat. Nyissa Meg A ViewController Alkalmazást.swift és adja hozzá az alábbiakat viewDidLoad():

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //1 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } let managedContext = appDelegate.persistentContainer.viewContext //2 let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person") //3 do { people = try managedContext.fetch(fetchRequest) } catch let error as NSError { print("Could not fetch. \(error), \(error.userInfo)") }}

lépésről lépésre ezt teszi a kód:

  1. mielőtt bármit is csinálhatna az alapadatokkal, szüksége van egy felügyelt objektumkörnyezetre. A lekérés nem különbözik egymástól! Mint korábban, húzza fel az alkalmazásmegbízottat, és megragad egy hivatkozást a tartós tárolójára, hogy megkapja a kezét a NSManagedObjectContext.
  2. ahogy a neve is sugallja, NSFetchRequest az az osztály, amely felelős az alapadatokból történő lekérésért. A lekérési kérések egyszerre hatékonyak és rugalmasak. A lekérési kérések segítségével lekérheti a megadott feltételeknek megfelelő objektumok halmazát (pl. adjon meg minden Wisconsinban élő alkalmazottat, aki legalább három éve volt a cégnél), egyéni értékeket (azaz adja meg a leghosszabb nevet az adatbázisban) és így tovább.

    a lekérési kérések több minősítővel rendelkeznek a visszaadott eredmények finomításához. Most tudnia kell, hogy a NSEntityDescription egyike ezeknek a szükséges minősítőknek.

    a lekérési kérelem entity tulajdonságának beállítása, vagy a init(entityName:) – val történő inicializálás egy adott entitás összes objektumát lekéri. Ez az, amit itt csinálsz, hogy lehívd az összes Person entitást. Megjegyzés: a NSFetchRequest egy általános típus. A generikus gyógyszerek használata meghatározza a lekérési kérelem várható visszatérési típusát, ebben az esetben NSManagedObject.

  3. átadja a lekérési kérelmet a felügyelt objektumkörnyezetnek a nehéz emelés elvégzéséhez. fetch(_:) a lekérési kérelemben megadott feltételeknek megfelelő felügyelt objektumok tömbjét adja eredményül.

Megjegyzés: A save() – hez hasonlóan a fetch(_:) hibát is dobhat, ezért a do blokkban kell használni. Ha hiba történt a lekérés során, ellenőrizheti a hibát a catch blokkban, és megfelelően reagálhat.

Építsd és futtasd az alkalmazást. Azonnal látnia kell a korábban hozzáadott nevek listáját:

nagyszerű! Visszatértek a halálból (pun intended). Adjon hozzá még néhány nevet a listához, és indítsa újra az alkalmazást, hogy ellenőrizze a Mentés és a lekérés működését. Az alkalmazás törlése, a szimulátor alaphelyzetbe állítása vagy a telefon eldobása egy magas épületből, a nevek a táblázat nézetében jelennek meg, bármi is legyen.

megjegyzés: volt néhány durva élek ebben a minta app: minden alkalommal le kellett szereznie a felügyelt objektumkörnyezetet az alkalmazásmegbízotttól, és a KVC-t használta az entitás attribútumainak eléréséhez, nem pedig egy természetesebb Objektumstílus person.name.

főbb pontok

  • a Core Data biztosítja a lemezen lévő perzisztenciát, ami azt jelenti, hogy az adatok az alkalmazás leállítása vagy az eszköz leállítása után is elérhetők lesznek. Ez különbözik a memóriában lévő perzisztenciától, amely csak addig menti az adatokat, amíg az alkalmazás a memóriában van, akár az előtérben, akár a háttérben.
  • az Xcode egy hatékony adatmodell-szerkesztővel rendelkezik, amellyel létrehozhatja a felügyelt objektummodellt.
  • a felügyelt objektummodell entitásokból, attribútumokból és kapcsolatokból áll
  • az entitás az alapadatok osztálydefiníciója.
  • az attribútum egy entitáshoz kapcsolódó információ.
  • a kapcsolat több entitás közötti kapcsolat.
  • a NSManagedObject egy alapadat-entitás futásidejű ábrázolása. Az attribútumokhoz kulcs-érték kódolással lehet olvasni és írni.
  • NSManagedObjectContextsave() vagy fetch(_:) adatokra van szükség az alapadatokhoz és azokból.

Hová menjünk innen?

az oktatóanyag befejezett projektjét letöltheti az oktatóanyag tetején vagy alján található “anyagok letöltése” gombokkal.

ebben az oktatóanyagban már számos alapvető Alapadatfogalmat ismerhet meg: adatmodellek, entitások, attribútumok, felügyelt objektumok, felügyelt objektumkörnyezetek és lekérési kérések.

ha tetszett, amit megtanult ez a bemutató, miért nem nézd meg a teljes Core Data by Tutorials könyv, elérhető a boltban?

itt egy kis ízelítőt, mi van a könyvben:

1. 1. fejezet, az első Core Data App: akkor kattintson Fájl Új projekt, és írjon egy Core Data app a semmiből! Ez a fejezet Az adatmodell beállításának, majd a rekordok hozzáadásának és lekérésének alapjait ismerteti.

2. Fejezet 2, NSManagedObject alosztályok: NSManagedObject az alap adattárolási osztály a Core Data object grafikonok. Ez a fejezet bemutatja, hogyan szabhatja testre saját felügyelt objektum alosztályait az adatok tárolására és érvényesítésére.

3. Fejezet 3, az alapadatok verem: a motorháztető alatt, az alapadatok sok részből állnak, amelyek együtt dolgoznak. Ebben a fejezetben megtudhatja, hogyan illeszkednek ezek az alkatrészek egymáshoz, és távolodjon el a starter Xcode sablontól, hogy saját testreszabható rendszert hozzon létre.

4. 4. fejezet, köztes Lekérés: az alkalmazások folyamatosan adatokat fognak letölteni, az alapadatok pedig számos lehetőséget kínálnak az adatok hatékony eljuttatására. Ez a fejezet a fejlettebb lekérési kérelmeket, predikátumokat, rendezést és aszinkron lekérést tárgyalja.

5. 5. fejezet, NSFetchedResultsController: a Táblázatnézetek sok iOS alkalmazás középpontjában állnak, és az Apple azt akarja, hogy az alapvető adatok szépen játsszanak velük! Ebben a fejezetben megtudhatja, hogy az NSFetchedResultsController hogyan takaríthat meg időt és kódot, ha a táblázatnézeteket az alapadatok adatai támogatják.

6. 6. fejezet verziószámozás és áttelepítés: az alkalmazás frissítésekor és továbbfejlesztésekor az adatmodellnek szinte biztosan meg kell változnia. Ebben a fejezetben megtudhatja, hogyan hozhatja létre az adatmodell több verzióját, majd migrálhatja előre a felhasználókat, hogy frissítés közben megőrizhessék meglévő adataikat.

7. 7. fejezet, Egységtesztek: a tesztelés a fejlesztési folyamat fontos része, és ebből nem szabad kihagyni az alapadatokat! Ebben a fejezetben megtudhatja, hogyan állíthat be külön tesztkörnyezetet az alapadatokhoz, és példákat talál a modellek tesztelésére.

8. 8. fejezet: a teljesítmény mérése és növelése: Soha senki nem panaszkodott, hogy egy alkalmazás túl gyors volt, ezért fontos, hogy éber legyen a teljesítmény nyomon követésében. Ebben a fejezetben megtudhatja, hogyan mérheti az alkalmazás teljesítményét különféle Xcode eszközökkel, majd vegyen fel néhány tippet a kód lassú foltjainak kezeléséhez.

9. Fejezet 9, Több felügyelt objektum-kontextus: ebben az utolsó fejezetben, kibővíti a szokásos Alapadatköteget több felügyelt objektum-kontextusra. Megtudhatja, hogy ez hogyan javíthatja az észlelt teljesítményt, és segíthet abban, hogy az alkalmazás architektúrája kevésbé monolitikus és szétválasztottabb legyen.

az üzlet édesítésének elősegítése érdekében a könyv digitális kiadása 44,99 dollárért eladó! De ne várjon — ez az eladási ár csak korlátozott ideig érhető el.

Apropó édes foglalkozik, biztos, hogy nézd meg a nagy nyereményeket adunk el ebben az évben az iOS 11 Launch Party, köztük több mint $9,000 a giveaways!

ahhoz, hogy jogosult legyen erre az epikus iOS 12 ajándékra, csak annyit kell tennie, hogy megjegyzést fűz az eredeti indító bejegyzéshez, tudatva velünk, hogy melyik könyv vagy tanfolyam a kedvenced ezen a listán — vagy melyik közelgő könyv vagy tanfolyam miatt vagy a legjobban izgatott!

reméljük, hogy élvezni fogja ezt a frissítést, és maradjon velünk további könyvkiadásokért és frissítésekért!

raywenderlich.com Heti

a raywenderlich.com a hírlevél a legegyszerűbb módja annak, hogy naprakész maradjon mindenről, amit mobil fejlesztőként tudnia kell.

kap egy heti összefoglaló a mi oktatóanyagok és tanfolyamok, és kap egy ingyenes mélyreható e-mail tanfolyam, mint a bónusz!

átlagos értékelés

4.6/5

értékelés hozzáadása ehhez a tartalomhoz

bejelentkezés értékelés hozzáadásához

56 értékelés

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.