Извличане на управлявани обекти от Core Data в Cocoa, Mac OS, iOS, Apple, разработчик на Xcode
Този раздел описва как да извличате управлявани обекти и предоставя някои съображения за гарантиране, че извадката е ефективна. Той също така показва как можете да използвате обекти NSExpressionDescription, за да получите конкретни стойности.
Извличане на управлявани обекти
Вие извличате управлявани обекти, като изпращате заявка за извличане до управлявания обект на контекста. Първо създавате заявка за избора. Като минимум трябва да посочите обект за заявката. Можете да извлечете обекти от управляван обектен модел, като използвате метода entityForName:inManagedObjectContext: NSEntityDescription. Можете също така да зададете предиката, дескрипторите за сортиране и други атрибути, ако е необходимо. Извличате обекти от контекста с помощта на executeFetchRequest:error:, както е показано в примера по-долу.
Списък 1 Пример за създаване и изпълнение на заявка за избор
Не можете да извличате с помощта на преходни предикати (въпреки че можете сами да използвате преходни свойства за филтриране в паметта). Освен това има някои взаимодействия между извличане и тип съхранение. За да обобщим, ако избирате директно, не трябва да добавяте Objective-C предикати или дескриптори за сортиране към заявки за избор. Вместо това трябва да приложите това към пробните резултати. Ако използвате контролер на масив, може да се наложи да подкласирате NSArrayController, така че да не се налага да сортирате в постоянно хранилище, а вместо това да извършите сортирането, след като данните бъдат извлечени.
Извличане на индивидуални обекти
Ако вашето приложение използва множество контексти и искате да проверите дали даден обект е премахнат от постоянното хранилище, виеМожете да създадете заявка за избор с предикат като self ==%@. Обектът, който предавате като променлива, може да бъде управляван обект или ID на управляван обект, както е показано в следния пример:
Дължината на масива, върнат от извличането, ще бъде 0, ако целта е премахната. Ако трябва да проверите за множество обекти, по-ефективно е да използвате оператора IN, отколкото да правите множество селекции на отделни обекти, като така:
Получаване на конкретни стойности
Понякога не искате да получите действителните управлявани обекти, вместо това просто искате да получите, например, най-голямата или най-малката стойност на определен атрибут. В Mac OS X 10.6 и по-нова версия и в iOS можете да използвате NSExpressionDescription за директно извличане на стойности, които отговарят на вашите критерии.
Можете да създадете заявка за избор на обект и да зададете неговия обект, точно както бихте направили за нормален избор, но:
-
Вие указвате, че извличането трябва да върне речници.
Изпращате на заявката за извличане setResultType: съобщение с NSDictionaryResultType аргумент.
Създавате екземпляри NSExpressionDescription, за да посочите свойствата, които искате да извлечете.
Ако просто искате една стойност, като например най-голямата заплата в таблицата Employee, тогава просто създавате декларация на един израз.
Има няколко стъпки за следене, създаване и използване на изрази за описание.
-
На първо място, трябва да създадете изрази (екземпляри на NSExpression), представляващи ключ-път към стойността, която ви интересува, и представящи функцията, която искате да приложите (например max: или min:):
Пълен списък на поддържаните функции expressForFunction:arguments:
средно аритметично: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | Обект NSNumber (средна стойност в масив) | Mac OS X v10.4 и по-нова версия |
сума: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | Обект NSNumber (сума от стойности в масив) | Mac OS X v10.4 и по-нова версия |
броя: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | Обект NSNumber (брой елементи в масива) | Mac OS X v10.4 и по-нова версия |
мин.: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | Обект NSNumber (минимална стойност в масива) | Mac OS X v10.4 и по-нова версия |
макс.: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | Обект NSNumber (максимална стойност в масива) | Mac OS X v10.4 и по-нова версия |
Медиана: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | Обект NSNumber (средна стойност в масив) | Mac OS X v10.5 и по-нова версия |
режим: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | NSNumber обект (вид стойности в масив) | Mac OS X v10.5 и по-нова версия |
stddev: | NSArray обект, съдържащ NSExpression обекти, представляващи числа | NSNumber обект (стандартна вариация на стойностите в масив) | Mac OS X v10.5 и по-нова версия |
добави към: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | Обект NSNumber (сума от стойности в масив) | Mac OS X v10.5 и по-нова версия |
от:извади: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (резултатът от изваждането на втората стойност в масива от първата стойност в масива) | Mac OS X v10.5 и по-нова версия |
умножи:по: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | Обект NSNumber (резултат от умножаване на стойности в масив) | Mac OS X v10.5 и по-нова версия |
разделяне:на: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | Обект NSNumber (резултатът от разделянето на първата стойност в масива на втората стойност в масива) | Mac OS X v10.5 и по-нова версия |
модул:от: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (остатък от разделянето на първата стойност в масива на втората стойност в масива) | Mac OS X v10.5 и по-нова версия |
sqrt: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber (корен квадратен от стойността в масива) | Mac OS X v10.5 и по-нова версия |
дневник: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber (логаритъм на стойността в масива) | Mac OS X v10.5 и по-нова версия |
в: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber (естествен логаритъм на стойността в масива) | Mac OS X v10.5 и по-нова версия |
повишавам:toPower: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (резултатът от повишаване на първата стойност в масива на степен на втората стойност в масива) | Mac OS X v10.5 ипо-висок |
опит: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber (базирана на експонента стойност в масив) | Mac OS X v10.5 и по-нова версия |
таван: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | NSNumber обект (най-малкото цяло число, не по-малко от стойността в масива) | Mac OS X v10.5 и по-нова версия |
коремни мускули: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber (абсолютна стойност на стойността в масива) | Mac OS X v10.5 и по-нова версия |
багажник: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber (стойността на интеграла, най-близка до, но не по-голяма от стойността в масива) | Mac OS X v10.5 и по-нова версия |
случаен | нула | Обект NSNumber (произволна цяло число) | Mac OS X v10.5 и по-нова версия |
случаен: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | NSNumber обект (произволно число между 0 и стойност в масив (изключително)) | Mac OS X v10.5 и по-нова версия |
сега | нула | NSDate обект (текущ час и дата) | Mac OS X v10.5 и по-нова версия |
етаж: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | Обект NSNumber | iOS 3.0 и по-нова версия |
Главна буква: | Обект NSArray, съдържащ един обект NSExpression, представляващ низа | NSString обект | iOS 3.0 и по-нова версия |
малки букви: | Обект NSArray, съдържащ един обект NSExpression, представляващ низа | NSString обект | iOS 3.0 и по-нова версия |
побитовоИ:с: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (числото се третира като NSInteger) | iOS 3.0 и по-нова версия |
побитовоИли:с: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (числото се третира като NSInteger) | iOS 3.0 и по-нова версия |
bitwiseXor:с: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (числото се третира като NSInteger) | iOS 3.0 и по-нова версия |
ляво преместване:от: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (числото се третира като NSInteger) | iOS 3.0 и по-нова версия |
дясно преместване:от: | Обект NSArray, съдържащ два обекта NSExpression, представляващи числа | NSNumber обект (числото се третира като NSInteger) | iOS 3.0 и по-нова версия |
onesComplement: | Обект NSArray, съдържащ един обект NSExpression, представляващ число | NSNumber обект (числото се третира като NSInteger) | iOS 3.0 и по-нова версия |
индекс: | NSArray обект, съдържащ обекта NSExpression | Резултатът от оценката на параметъра е сякаш изразът на функцията noindex: не съществува. | iOS 3.0 и по-нова версия |
Името е ключът, който ще се използва в речника за върнатата стойност. Ако искате да получите множество стойности като най-високата и най-ниската заплата в таблицата Служители - името на всякаизразите за описание трябва да са уникални за даден избор на заявка.
След това можете да извлечете заявката точно като всяка друга (с помощта на executeFetchRequest:error:). Заявката се връща, въпреки че масивът, съдържащ речника, ключовете и стойностите, съответства на имената и стойностите на декларационния израз, които сте поискали.
Следващият пример показва как да получите минималната стойност на атрибута "creationDate" на обект с име "Event".
Избор и наследяване на обект
Ако дефинирате йерархия на наследяване на обект, когато посочите супер обект като обект за заявка за избор, заявката връща всички съответни екземпляри на супер обекта и под обекта. В някои случаи е възможно да се посочи супер-субект като абстрактен. За да се получат съответни екземпляри на всички конкретни под-субекти на абстрактен обект, е необходимо да се настрои обектът да извлича спецификацията като абстрактен обект. В случая на домейна, описан в „Абстрактни обекти“, ако укажете да получите заявка с графичен обект, извличането връща подходящите екземпляри Circle, TextBox и Line.