2015-07-15 6 views
0

Я новичок в разработке iOS и исходя из Java-мира. Я полностью потерял себя от того, как мне следует запрашивать модель CoreData.Как построить сложный запрос с помощью CoreData?

Я пытаюсь показать список сообщений, сгруппированных по их именам, а затем упорядочен по последнему сообщению и прочитано ли сообщение. Например, на Android я буду запускать следующий sql-запрос.

SELECT *, wm1.date_timestamp AS TimeSpent " + 
"FROM messages wm1 " + 
"JOIN (" + 
"SELECT *, MAX(date_timestamp) as dt " + 
"FROM messages " + 
"WHERE to_user = ?" + 
" GROUP BY from_user " + 
") wm2 ON wm1.from_user = wm2.from_user AND wm1.date_timestamp = wm2.dt " + 
"ORDER BY wm1.is_read ASC, wm1.date_timestamp DESC 

Может кто-нибудь указать мне в правильном направлении, как это сделать на iOS.

+0

Простым фактом является то, что вы не можете воспроизводить сложные запросы, подобные тем, у которых есть чистые данные ядра, и если вам это нужно, это может быть не инструмент для вас. NSPredicate и NSSortDescriptor будут обрабатывать только некоторые его части. –

+0

Да, это имеет смысл, так есть ли чистый способ сделать это на iOS? Я имею в виду, что сбор итогового списка выше занимает много кода без запроса. – Lunar

+0

Загляните в FMDB, если вы готовы работать напрямую с базой данных SQLite вместо Core Data. Это позволит вам работать так, как вы привыкли, напрямую выполняя SQL-запросы. https://github.com/ccgus/fmdb –

ответ

0

Основные данные не являются ОРМ. Это путаница номер один, когда люди переходят с другого языка.

Основные данные - это граф объектов, который может сохраняться на диске, и один из способов, которым он может сохраняться на диске, - это база данных.

Это важно, потому что ваш вопрос подходит к нему с точки зрения базы данных.

Если вам нужно получить доступ к определенной базе данных, которая построена определенным образом, то Core Data не то, что вы должны использовать.

Если вы начинаете новое приложение и просто пытаетесь использовать Core Data таким образом, чтобы вам было удобно, тогда вы должны остановиться, посмотреть на него как на графа объектов и перестроить свою модель, чтобы описать объекты, которые вы хотите использовать с. Когда вы это делаете, запросы становятся намного проще.

0

Вы не должны использовать базовые данные, вы также можете запросить базу данных SQLite напрямую:

http://www.objc.io/issues/4-core-data/SQLite-instead-of-core-data/

Однако, это зависит от ваших требований, но основные данные являются состоянием техники. К сожалению, вам необходимо написать необходимые JOINs и GROUPS ... вручную. Это означает, что вы должны фильтровать, сортировать и объединять множество массивов.