2013-11-07 2 views
1

Итак, давайте предположим, что у меня есть это в БД:NSFRC основные данные выборки последних записей

а, б, в, г, д, е (упорядочены по дате)

И я хочу, чтобы принести их в порядке по дате и получить только последние 2 в каждом запросе

Так я хотел бы получить: е, е

проблема в том, что если я использую fetchLimit, я получаю первые из моих упорядоченные выборки не последние из них , Я мог рассчитывать смещение каждый раз, когда NSFRC изменяется. Также мне нужно использовать NSFRC.

Кто-нибудь знает лучшее решение?

В SQL мой запрос будет:

select * from (select * from tblmessage order by sortfield ASC limit 10) order by sortfield DESC; 

Это то, что я хочу, но для IOS: Android SQLite Query - Getting latest 10 records

ответ

1

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

fetchRequest.sortDescriptors = 
@[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]]; 
fetchRequest.fetchLimit = 2; 

NSArray *final result = [[fetchedObjects reverseObjectEnumerator] allObjects]; 

Конечно, я вижу, что проблема с FRC не решена таким образом. Если у вас есть плоский FRC т.е. без разделов, вы можете просто манипулировать индекс вашего fetchedObjects массива (подставляя каждый индекс i с count-1-i.

Может быть, лучший способ для выполнения быстрого извлечения перед возвратом FRC для того, чтобы определить, fetchOffset. было бы очень эффективно, я думаю, что с помощью countForFetchRequest.

NSInteger count = [self.managedObjectContext countForFetchRequest:request]; 
fetchRequest.sortDescriptors = 
    @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]]; 
fetchRequest.fetchOffset = count-2; 

Если следовать шаблону шаблон Apple, Core Data в лениво ЗАГРУЗКА FRC, исполнение должно быть безукоризненным.

+0

Я использовал первые как вы упомянутый :) Теперь я перехожу ко второму. Но я думаю, что для этого есть лучший вариант. Как и в SQL, вложенный запрос может легко решить эту проблему. –

+0

Я закончил использовать второй подход, когда я делаю подсчет для каждого обновления выбранных объектов. Хорошо, что после того, как установлен смещение, он будет сохранен, даже если в базе данных будет больше объектов. Вам не нужно добавлять 1 каждый раз, когда есть новый объект: –

Смежные вопросы