Здравствуйте, я пытаюсь фильтровать только объекты, которые попадают под определенное время. Например, мне нужны только объекты, которые были до 8 часов утра или после 1 вечера.Фильтровать объекты данных ядра по времени
Если в моем объекте есть атрибут createdDate, и я хочу только получить объекты, созданные до 8AM, каким будет подход?
Я хотел сделать это, используя любой из этих подходов, но получал 0 результатов, опробовав оба подхода.
1.Created отдельный производный атрибут, который возвращает часть времени и делает фильтр на этом.
т.е. (Стойкие) createdDate -> (Derived) createdTimeByHour
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"createdTimeByHour < 10"];
2.Setup предикат фильтрации на основе конвертированного createdDate.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"createdDate.hour < 10"];
Попытки:
Я пытался реализовать первое решение, но NSFetchRequest не возвращается ко мне никаких результатов. Я создаю производный атрибут как так ...
- (NSNumber *)createdTimeByHour
{
NSNumber *result;
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:[self createdDate]];
result = @([components hour]);
return result;
}
ФОН ПРОБЛЕМА Я обнаружил, что я получаю 0 результатов, потому что я добавил полученные данные после того, как было уже существующие объекты в Core Data. Эти объекты не имеют значения в основных данных, но при попытке войти в него после получения всех результатов он создает производный результат, но никогда не сохраняет или не сохраняет данные в основных данных. Я надеялся, что мне не нужно будет хранить это в Core Data, но, в конце концов, имеет смысл сделать это, потому что я часто буду запрашивать это поле.
ПРОСТОЕ РЕШЕНИЕ Таким образом, в очень простом случае, в более раннем, чтобы фильтровать по времени, вы должны создать атрибут, который сохраняет это значение в основных данных. Насколько мне известно, вы не можете фильтровать по времени прямо из NSDate.
ДОПОЛНИТЕЛЬНОЕ РЕШЕНИЕ Если вы добавляете это поле, когда в основных данных уже есть объекты, вы должны обработать каждый объект в основных данных, чтобы сохранить этот результат.
Благодарим за отзыв мунди. Проблема заключается в использовании NSFetchRequest, она не возвращает никаких значений. Я отредактировал вопрос выше, чтобы показать, как я создал производный атрибут. –
Это другая проблема, связанная с вашими данными или заполнением полей данных. – Mundi
Извините mundi за путаницу. Я отредактировал вопрос выше, чтобы показать, как я создал производный атрибут. Когда вы это делаете и проверяете первое решение, он возвращает 0 результатов. Это заставляет меня думать, что вы не можете фильтровать на основе полученных атрибутов. –