Доступ к таблицам CoreData из fmdb

Я использую CoreData в своем приложении для операторов DML, и с ним все в порядке. Однако я не хочу использовать NSFetchedResultsController для простых запросов, таких как подсчет строк и т. д.

Я решил использовать fmdb, но не знаю реальных имен таблиц для написания sql. Имена объектов и таблиц не совпадают. Я даже заглянул внутрь файла .sqllite с помощью TextEdit, но без надежды :) FMResultSet *rs = [db getSchema] не возвращает никаких строк

Может есть лучшее решение моей проблемы?

заранее спасибо


person Elnur    schedule 25.08.2011    source источник


Ответы (1)


Core Data добавляет ко всем именам SQL префикс Z_. Используйте инструменты командной строки SQL, чтобы проверить файл вашего постоянного хранилища, чтобы увидеть, какие имена он использует.

Однако это очень сложное и хрупкое решение. Схема Core Data недокументирована и изменяется без предупреждения, поскольку Core Data не поддерживает прямой доступ к SQL. Вы, вероятно, сделаете ошибку при доступе к файлу хранилища напрямую, и ваше решение может случайно сломаться при следующем обновлении API.

Core Data API предоставляет искомую функциональность. Я просто использую запрос на выборку, который извлекает определенное значение, используя NSExpressionDescription для выполнения функции. Это позволяет вам получать такую ​​информацию, как количество, минимум, максимум и т. д. Вы можете создавать и использовать такие выборки независимо от NSFetchedResultsController.

Core Data API очень многофункциональный. Если вы обнаружите, что ищете решение для работы с данными за пределами API, скорее всего, вы что-то упустили в API.

person TechZen    schedule 25.08.2011