Eu tenho um modelo de dados principais com uma NSDate
propriedade Eu quero filtrar o banco de dados por dia. Presumo que a solução envolva um NSPredicate
, mas não tenho certeza de como juntar tudo.
Eu sei como comparar o dia de dois NSDate
segundos usando NSDateComponents
e NSCalendar
, mas como faço para filtrá-lo com um NSPredicate
?
Talvez eu precise criar uma categoria na minha NSManagedObject
subclasse que possa retornar uma data simples apenas com o ano, o mês e o dia. Então eu poderia comparar isso em um NSPredicate
. Essa é sua recomendação ou há algo mais simples?
objective-c
core-data
nsdate
nspredicate
nsfetchedresultscontroller
Jonathan Sterling
fonte
fonte
==
. Embora se você estiver pesquisando por dia, lembre-se de que o NSDate é uma data e hora - você pode usar um intervalo de meia-noite a meia-noite.startDate
para 2012-09-17 0:00:00 eendDate
2012-09-18 0:00:00 e o predicado para startDate <= date <endDate. Isso ocorreria o tempo todo em 17/09/2012.Exemplo de como também configurar startDate e endDate para a resposta fornecida acima:
Aqui, eu estava pesquisando todas as entradas em um mês. Vale ressaltar, que este exemplo também mostra como pesquisar entradas de data 'nulas'.
fonte
Em Swift, eu tenho algo parecido com:
Foi difícil descobrir que a interpolação de cadeias
"\(this notation)"
não funciona para comparar datas no NSPredicate.fonte
Extensão Swift 3.0 para Data:
Então use como:
fonte
Enviei a resposta de Glauco Neves para o Swift 2.0 e a envolvi em uma função que recebe uma data e retorna a
NSPredicate
para o dia correspondente:fonte
Adicionando à resposta de Rafael (incrivelmente útil, obrigado!), Portando o Swift 3.
fonte
Recentemente, passei algum tempo tentando resolver esse mesmo problema e adicione o seguinte à lista de alternativas para preparar datas de início e término (inclui o método atualizado para iOS 8 e posterior) ...
... e
NSPredicate
para os dados principaisNSFetchRequest
(como já mostrado acima em outras respostas) ...fonte
Para mim, isso é trabalhado.
Eu filtrei a matriz da data atual para 7 dias atrás. Quero dizer, estou recebendo dados de uma semana a partir da data atual. Isso deve funcionar.
Nota: Estou convertendo a data que vem com mili segundos por 1000 e comparando depois. Deixe-me saber se você precisar de alguma clareza.
fonte
completeArray
é ter Matriz dedictionary
oudataModel
quero aplicar no DataModel.