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:
in medie: | Obiect NSArray care conține obiecte NSExpression care reprezintă numere | Obiect NSNumber (valoarea medie în matrice) | Mac OS X v10.4 și o versiune ulterioară |
sumă: | Obiect NSArray care conține obiecte NSExpression care reprezintă numere | Obiect NSNumber (suma valorilor din matrice) | Mac OS X v10.4 și o versiune ulterioară |
numara: | Obiect NSArray care conține obiecte NSExpression care reprezintă numere | obiect 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ă numere | Obiect NSNumber (valoarea minimă în matrice) | Mac OS X v10.4 și o versiune ulterioară |
max: | Obiect NSArray care conține obiecte NSExpression care reprezintă numere | Obiect NSNumber (valoarea maximă în matrice) | Mac OS X v10.4 și versiuni ulterioare |
median: | Obiect NSArray care conține obiecte NSExpression care reprezintă numere | Obiect NSNumber (valoarea medie în matrice) | Mac OS X v10.5 și versiuni ulterioare |
modul: | Obiect NSArray care conține obiecte NSExpression care reprezintă numere | Obiect 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ă numere | Obiect 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 numere | Obiect 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 numere | Obiect 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 numere | Obiect 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 numere | Obiect 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 numere | Obiect 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ăr | Obiect 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ăr | obiect 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ăr | Obiect 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 numere | Obiect 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ăr | Obiect 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ăr | Obiect 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ăr | Obiect 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ăr | Obiect NSNumber (valoarea integralei cea mai apropiată, dar nu mai mare decât, valoarea din matrice) | Mac OS X v10.5 și o versiune ulterioară |
Aleatoriu | zero | obiect 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ăr | Obiect NSNumber (număr aleatoriu între 0 și valoarea din matrice (exclusiv)) | Mac OS X v10.5 și versiuni ulterioare |
acum | zero | Obiect 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ăr | obiect NSNumber | iOS 3.0 și versiuni ulterioare |
majuscule: | Obiect NSArray care conține un singur obiect NSExpression reprezentând șirul | Obiect NSString | iOS 3.0 și versiuni ulterioare |
litere mici: | Obiect NSArray care conține un singur obiect NSExpression reprezentând șirul | Obiect NSString | iOS 3.0 și versiuni ulterioare |
bitwiseAnd:cu: | Obiect NSArray care conține două obiecte NSExpression reprezentând numere | Obiect 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 numere | Obiect 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 numere | Obiect 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 numere | Obiect 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 numere | Obiect 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ăr | Obiect NSNumber (un număr este tratat ca un NSInteger ) | iOS 3.0 și versiuni ulterioare |
index: | Obiect NSArray care conține obiectul NSExpression | Rezultatul evaluării parametrilor este ca și cum expresia noindex: funcția nu ar exista. | iOS 3.0 și versiuni ulterioare |
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.