Фильтр NSFetchedResultsController для нулевой стоимости?

голоса
2

У меня есть , NSFetchedResultsControllerкоторый выборки объектов из NSManagedObjectContext.

Эти объекты имеют lastOpenedсвойство, которое изначально nilи устанавливается только тогда , когда они рассматриваются.

Я хочу , чтобы мои , UITableViewчтобы отобразить список наиболее недавно открытых объектов, которые я могу сделать, добавив NSSortDescriptorк NSFetchRequest.

Вопрос:

Я не хочу , чтобы отобразить объекты , которые никогда не были изучены. ( lastOpened == nil) Могу ли я сортировать это через то же самое NSFetchRequest? Есть ли лучший способ для фильтрации данных?

Благодарю.

Задан 01/07/2009 в 20:35
источник пользователем
На других языках...                            


3 ответов

голоса
8

Абсолютно. Что вы ищете является NSPredicate . В основном, это позволяет указать один или несколько условий, которые вы хотите , чтобы ваши надуманные объекты встречаются, то только выбирает объекты , которые соответствуют этим условиям.

Строительный предикат является немного сложным предложением, однако - вы можете захотеть взглянуть на Predicate Формат Строки Синтаксис Руководстве для начала работы . Для вашего конкретного случая, это еще сложнее , так как я не уверен , что есть представление для нулевой стоимости в предикативных термах. Вы можете обойти это, однако, с помощью некоторой даты в далеком прошлом:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened > %@",
                          [NSDate dateWithTimeIntervalSince1970:0]];

Вы можете просто проверить с нуля непосредственно в предикате:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened != nil"];

Это создает предикат, который позволяет только объекты с установленной даты (что-либо после того, как 1 января 1970 года) должны быть возвращены. Вы бы затем добавить предикат запроса выборки, прежде чем выполнить его:

// Assuming you have some almost-ready NSFetchRequest *request:
[request setPredicate:predicate];
Ответил 01/07/2009 в 20:45
источник пользователем

голоса
5

Попробуй это:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"lastOpened != nil"];
... // add sort descriptors etc.

Затем добавьте выборки запроса к NSFetchResultsController.

Ответил 01/07/2009 в 20:44
источник пользователем

голоса
0

Для Swift, вы можете инициализировать NSPredicate с булевым всегда возвращать истинный, эффективно фильтр, который ничего не фильтровать

return fetchedResultsController("Terminal", withFilter: NSPredicate(value: true), sortColumns: sortColumns, sortDirections: sortDirections)
Ответил 15/06/2017 в 14:10
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more