Intereting Posts
Опция «За текущий контекст» недоступна в Xcode Storyboard? Измененные в XCode модели сопоставления не обновляются в симуляторе Swift 3 / Как вызвать tableView.reloadData () в глобальной функции? Основные данные: нет указательного пути для повторного использования ячейки таблицы, исчезновение ячеек Добавить инфраструктуру SQLite в мой проект Наблюдатель пограничного времени AVPlayer не срабатывает изредка xCode – сбой сборки картой Google AFNetworking с ошибкой канала cocoapods при использовании Xcode6 XCode / gdb теряет стек при отладке по вызовам динамических функций библиотеки на iOS Как опубликовать на стене друга, используя facebook sdk? Используют ли мобильные и мобильные приложения Facebook и Twitter браузер Safari? Нужно ли мне обновляться до Lion для тестирования iPad с iOS 5.1? Понимание того, как читать документацию iOS и ссылку на API Подключение Sphero 2.0 к Mac OSX 10.9 Убедитесь, что tintColor затемнен в tintColorDidChange

Получить верхнюю часть 1 из отдельного атрибута в CoreData

Привет, у меня есть таблица с форматом, показанным ниже.

Я хочу построить представление истории, поэтому мне нужны последние сообщения от разных пользователей, упорядоченных по метке времени!

+---+-------------------+-------------------+---------------+ | | Username | Message | Timestamp | +---+-------------------+-------------------+---------------+ | 1 | John | Hello | 486380161.723 | | 2 | Mark | Spreadsheet | 486380264.723 | | 3 | John | FYI | 486380366.723 | | 4 | John | Bye | 486557497.271 | | 5 | Mark | How are you? | 486557597.274 | | 6 | Mario | What? | 486558597.274 | +---+-------------------+-------------------+---------------+

Это и должен быть мой результат.

+---+-------------------+-------------------+---------------+ | | Username | Message | Timestamp | +---+-------------------+-------------------+---------------+ | 6 | Mario | What? | 486558597.274 | | 5 | Mark | How are you? | 486557597.274 | | 4 | John | Bye | 486557497.271 | +---+-------------------+-------------------+---------------+

На данный момент я получаю все разные username , итерацию каждого из них и запрос сообщений для этого имени пользователя, упорядоченного по метке времени, с limit(1) .

Я не доволен этим решением, чтобы кто-нибудь мог помочь мне лучше?

Благодарю, Mário

Это можно сделать в двух вариантах, с одним предостережением, о котором я расскажу, когда я доберусь до него.

Первая выборка получает имена пользователей и самую последнюю временную метку для каждого:

  let maxTimestampRequest = NSFetchRequest(entityName: "Entity") maxTimestampRequest.resultType = .DictionaryResultType let maxTimestampExpression = NSExpression(format: "max:(timestamp)") let maxTimestampExpressiondescription = NSExpressionDescription() maxTimestampExpressiondescription.name = "maxTimestamp" maxTimestampExpressiondescription.expression = maxTimestampExpression maxTimestampExpressiondescription.expressionResultType = .DoubleAttributeType maxTimestampRequest.propertiesToFetch = ["username", maxTimestampExpressiondescription] maxTimestampRequest.propertiesToGroupBy = ["username"] 

Выполните эту выборку, и вы получите массив словарей. Каждый словарь содержит имя пользователя и самую последнюю временную метку для этого имени пользователя:

 Optional([{ maxTimestamp = "486557497.271"; username = John; }, { maxTimestamp = "486558597.274"; username = Mario; }, { maxTimestamp = "486557597.274"; username = Mark; }]) 

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

  var predicates = [NSPredicate]() for maxTimestampInfo in results! { let username = maxTimestampInfo["username"]! let timestamp = maxTimestampInfo["maxTimestamp"]! let partialPredicate = NSPredicate(format: "username=%@ and timestamp=%@", argumentArray:[ username, timestamp ]) predicates.append(partialPredicate) } let completePredicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates) let fetch = NSFetchRequest(entityName: "Entity") fetch.predicate = completePredicate 

Выполните эту выборку, и вы получите полностью управляемые объекты, соответствующие вашим требованиям.

Предостережение заключается в том, что предикат во второй выборке потенциально может быть очень большим, в зависимости от количества пользователей, которые у вас есть.