Extragerea obiectelor gestionate Core Data în Cocoa, Mac OS, iOS, Apple, dezvoltator Xcode

Această secțiune descrie modul de preluare a entităților gestionate și oferă câteva considerații pentru a vă asigura că eșantionarea este eficientă. De asemenea, arată cum puteți utiliza obiectele NSExpressionDescription pentru a obține anumite valori.

Preluarea obiectelor gestionate

Preluați obiecte gestionate trimițând o solicitare de preluare la obiectul gestionat din context. Mai întâi, creați o interogare pentru selecție. Cel puțin, trebuie să specificați un obiect pentru cerere. Puteți prelua entități dintr-un model de obiect gestionat folosind metoda entityForName:inManagedObjectContext: NSEntityDescription. De asemenea, puteți seta predicatul, descriptorii de sortare și alte atribute după cum este necesar. Preluați obiecte din context utilizând executeFetchRequest:error: așa cum se arată în exemplul de mai jos.

Listing 1 Exemplu de creare și executare a unei interogări de selectare

Nu puteți extrage folosind predicate tranzitorii (deși puteți utiliza proprietăți tranzitorii pentru filtrarea în memorie). De asemenea, există unele interacțiuni între preluare și tipul de stocare. Pentru a rezuma, dacă faceți selectări direct, nu ar trebui să adăugați predicate Objective-C sau descriptori de sortare pentru a selecta interogările. În schimb, trebuie să aplicați acest lucru la rezultatele eșantionului. Dacă utilizați un controler de matrice, poate fi necesar să subclasați NSArrayController, astfel încât să nu fie nevoie să sortați în stocare persistentă, ci să faceți sortarea după ce datele au fost preluate.

Recuperarea obiectelor individuale

Dacă aplicația dvs. folosește mai multe contexte și doriți să verificați dacă un obiect a fost eliminat din stocarea persistentă, dvsPuteți crea o interogare select cu un predicat precum self ==%@ . Obiectul pe care îl transmiteți ca variabilă poate fi fie un obiect gestionat, fie un ID de obiect gestionat, așa cum se arată în exemplul următor:

Lungimea matricei returnate de la preluare va fi 0 dacă ținta a fost eliminată. Dacă trebuie să verificați mai multe obiecte, este mai eficient să utilizați operatorul IN decât să faceți selecții multiple pe obiecte individuale, astfel:

Obținerea unor valori specifice

Uneori nu doriți să obțineți obiectele gestionate efectiv, ci doriți doar să obțineți, de exemplu, cea mai mare sau cea mai mică valoare a unui anumit atribut. Pe Mac OS X 10.6 și versiuni ulterioare și pe iOS, puteți utiliza NSExpressionDescription pentru a prelua direct valorile care corespund criteriilor dvs.

Puteți crea o interogare de selectare a obiectului și puteți seta entitatea acesteia, așa cum ați proceda pentru o selecție normală, dar:

    Specificați că preluarea ar trebui să returneze dicționare.

Trimiteți cererii de preluare un mesaj setResultType: cu un argument NSDictionaryResultType.

Creați instanțe NSExpressionDescription pentru a specifica proprietățile pe care doriți să le preluați.

Dacă doriți doar o singură valoare, cum ar fi cel mai mare salariu din tabelul Angajați, atunci pur și simplu creați o singură declarație expresie.

Există o serie de pași pentru a urmări, crea și utiliza expresii de descriere.

    În primul rând, trebuie să creați expresii (instanțe de NSExpression) care să reprezinte o cale-cheie către valoarea care vă interesează și care să reprezinte funcția pe care doriți să o aplicați (de exemplu, max: sau min:):

Lista completă a funcțiilor expressionForFunction:arguments acceptate:

FunctionParameterReturnsAvailable
in medie:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (valoarea medie în matrice)Mac OS X v10.4 și o versiune ulterioară
sumă:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (suma valorilor din matrice)Mac OS X v10.4 și o versiune ulterioară
numara:Obiect NSArray care conține obiecte NSExpression care reprezintă numereobiect NSNumber (numărul de elemente din matrice)Mac OS X v10.4 și o versiune ulterioară
min:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (valoarea minimă în matrice)Mac OS X v10.4 și o versiune ulterioară
max:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (valoarea maximă în matrice)Mac OS X v10.4 și versiuni ulterioare
median:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (valoarea medie în matrice)Mac OS X v10.5 și versiuni ulterioare
modul:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (un fel de valori într-o matrice)Mac OS X v10.5 și versiuni ulterioare
stddev:Obiect NSArray care conține obiecte NSExpression care reprezintă numereObiect NSNumber (varianța standard a valorilor dintr-o matrice)Mac OS X v10.5 și versiuni ulterioare
adaugă la:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (suma valorilor din matrice)Mac OS X v10.5 și versiuni ulterioare
din:scăderea:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (rezultatul scăderii celei de-a doua valori din matrice de la prima valoare din matrice)Mac OS X v10.5 și versiuni ulterioare
înmulțit cu:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (rezultatul înmulțirii valorilor în matrice)Mac OS X v10.5 și versiuni ulterioare
împarte la:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (rezultatul împărțirii primei valori din matrice la a doua valoare din matrice)Mac OS X v10.5 și versiuni ulterioare
modul:prin:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (restul de la împărțirea primei valori din matrice la a doua valoare din matrice)Mac OS X v10.5 și versiuni ulterioare
sqrt:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (rădăcină pătrată a valorii în matrice)Mac OS X v10.5 și versiuni ulterioare
Buturuga:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărobiect NSNumber (logaritmul valorii în matrice)Mac OS X v10.5 și versiuni ulterioare
ln:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (logaritmul natural al valorii în matrice)Mac OS X v10.5 și versiuni ulterioare
ridicare:la putere:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (rezultatul ridicării primei valori din matrice la puterea celei de-a doua valori din matrice)Mac OS X v10.5 șisuperior
exp:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (valoare bazată pe exponent în matrice)Mac OS X v10.5 și versiuni ulterioare
tavan:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (cel mai mic număr întreg, nu mai mic decât valoarea din matrice)Mac OS X v10.5 și o versiune ulterioară
abdomene:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (valoarea absolută a valorii în matrice)Mac OS X v10.5 și o versiune ulterioară
trompă:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (valoarea integralei cea mai apropiată, dar nu mai mare decât, valoarea din matrice)Mac OS X v10.5 și o versiune ulterioară
Aleatoriuzeroobiect NSNumber (valoare întreagă aleatorie)Mac OS X v10.5 și o versiune ulterioară
Aleatoriu:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (număr aleatoriu între 0 și valoarea din matrice (exclusiv))Mac OS X v10.5 și versiuni ulterioare
acumzeroObiect NSDate (ora și data curente)Mac OS X v10.5 și versiuni ulterioare
podea:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărobiect NSNumberiOS 3.0 și versiuni ulterioare
majuscule:Obiect NSArray care conține un singur obiect NSExpression reprezentând șirulObiect NSStringiOS 3.0 și versiuni ulterioare
litere mici:Obiect NSArray care conține un singur obiect NSExpression reprezentând șirulObiect NSStringiOS 3.0 și versiuni ulterioare
bitwiseAnd:cu:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (un număr este tratat ca un NSInteger )iOS 3.0 și versiuni ulterioare
biți sau:cu:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (un număr este tratat ca un NSInteger )iOS 3.0 și versiuni ulterioare
bitwiseXor:cu:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (un număr este tratat ca un NSInteger )iOS 3.0 și versiuni ulterioare
deplasare la stânga:de:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (un număr este tratat ca un NSInteger )iOS 3.0 și versiuni ulterioare
deplasare la dreapta:de:Obiect NSArray care conține două obiecte NSExpression reprezentând numereObiect NSNumber (un număr este tratat ca un NSInteger )iOS 3.0 și versiuni ulterioare
cele Complement:Obiect NSArray care conține un singur obiect NSExpression care reprezintă un numărObiect NSNumber (un număr este tratat ca un NSInteger )iOS 3.0 și versiuni ulterioare
index:Obiect NSArray care conține obiectul NSExpressionRezultatul evaluării parametrilor este ca și cum expresia noindex: funcția nu ar exista.iOS 3.0 și versiuni ulterioare
Apoi creați o definiție de expresie și setați-i numele, expresia și tipul de rezultat.

Numele este cheia care va fi folosită în dicționar pentru valoarea returnată. Dacă doriți să obțineți mai multe valori, cum ar fi cele mai mari și cele mai mici salarii din tabelul Angajați - numele fiecăruiaexpresiile de descriere trebuie să fie unice pentru o anumită selecție de interogare.

Apoi puteți prelua cererea la fel ca oricare alta (folosind executeFetchRequest:error: ). Interogarea este returnată chiar dacă matricea care conține dicționarul, cheile și valorile se potrivesc cu numele expresiei de declarație și valorile pe care le-ați solicitat.

Următorul exemplu arată cum să obțineți valoarea minimă a atributului „creationDate” pe o entitate numită „Event”.

Selectarea și moștenirea unei entități

Dacă definiți o ierarhie de moștenire a unei entități, atunci când specificați o super-entitate ca entitate pentru o interogare de selectare, interogarea returnează toate instanțele corespunzătoare ale super-entității și subentității. În unele cazuri, este posibil să se specifice o super-entitate ca abstractă. Pentru a obține instanțe corespunzătoare ale tuturor subentităților concrete ale unei entități abstracte, este necesar să setați entitatea să preia specificația ca să fie o entitate abstractă. În cazul domeniului descris în „Entități abstracte”, dacă specificați să obțineți o interogare cu o entitate grafică, preluarea returnează instanțele Cerc, TextBox și Line corespunzătoare.