Проверка данных
Вы сказали, что Core Data может выполнять проверку данных. Какое место она занимает в описанной схеме?
Как минимум Core Data проверяет объекты перед их сохранением в хранилище. Таким образом, ошибка проверки данных может быть выдана при попытке сохранения изменений, если управляемые объекты содержат недействительную информацию. В этот момент что-либо делать уже поздно, поэтому проверка объектов NSManagedObject должна производиться как можно ближе к моменту изменения. Явная проверка нового объекта NSManagedObject может выполняться так: [fugitive validateForlnsert:&error]. Аналогичные методы существуют для проверки операций обновления и вставки. Эти методы позволяют проверить соответствие NSManagedObject ограничениям, установленным в модели данных. Если проверка не прошла, можно проинформировать пользователя.
Можно ли сбросить его состояние?
Достаточно отправить ему сообщение rollback:. При получении сообщения контекст управляемых объектов отменяет все добавления объектов, удаления и не- сохраненные изменения в существующих объектах. Можно считать, что контекст обеспечивает управление транзакциями: изменения в сущностях, включая операции вставки и удаления, либо закрепляются сообщением save:, либо отменяются сообщением rollback:.
Показываем приложение Васе.
При виде детализированного представления и новых элементов для отслеживания поимки Вася приходит в восторг.
Да, я умею заполнять ячейки таблицы, но как отобрать только пойманных преступников?
Мы можем использовать Core Data для фильтрации результатов.
Информация о поимке преступников уже хранится в данных Fugitive; нужно лишь воспользоваться ей для составления списка пойманных преступников. Мы должны каким-то образом сообщить Core Data, что нам нужны только данные преступников с установленным флагом captured.
Использование предикатов для фильтрации данных
В языках баз данных предикаты используются для ограничения выборки данными, удовлетворяющими заданному критерию. Помните объект NSFetchRequest, о котором мы говорили в прошлой статье? Мы использовали описание сущности и дескриптор сортировки, но предикат нам не понадобился до настоящего момента.
Но возможности объектов NSPredicate не ограничиваются простыми сравнениями атрибутов. Apple предоставляет такие субклассы, как NSComparisonPredicate, NSCompoundPredicate и NSExpression, а также поддерживает синтаксис поиска по шаблону, перебор графа объектов и другие возможности. Сложные запросы на выборку даже могут строиться в графическом виде в Xcode. В приложении iBountyHunter для задачи Васе достаточно простой проверки атрибута, поэтому мы создадим предикат на программном уровне.
- Дата: 4-01-2015, 20:39