H. J'ai une entité appelée Agendadate et une appelée AgendaEvent. AgendaEvent a une relation de plusieurs à plusieurs avec AgendaDate (agendaDates).Swift coreData - date au format et l'utiliser dans le prédicat
dans mon agendaDate j'ai un objet dates (de type Date).
J'utilise un prédicat comme ceci:
fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.dates == %@", date as CVarArg)
Je suis en train de formater les dates d'avoir ceci:
"dd MM yyyy" au lieu de « aaaa mm jj hh: mm: ss "
J'ai besoin de comparer dans le prédicat deux dates mais sans le temps? est-ce possible?
MISE À JOUR ----- Voici ma fonction mis à jour comme vous l'avez suggéré:
func agendaEventsWithDate(date: Date) -> NSFetchRequest<AgendaEvent>
{
// create a fetch request that will retrieve all the AgendaEvents.
let fetchRequest = NSFetchRequest<AgendaEvent>(entityName: "AgendaEvent")
// set the predicate to only keep AgendaEvents where the related AgendaDate's date matches the passed in date.
let cal = Calendar.current
let startOfDay = cal.startOfDay(for: eventDate)
let endOfDay = cal.date(byAdding: .day, value: 1, to: startOfDay)!
print(startOfDay)
print(endOfDay)
// fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.agendaDates == %@", date as CVarArg)
fetchRequest.predicate = NSPredicate(format: "SUBQUERY(agendaDates, $a, $a.dates >= %@ AND $a.dates < %@)[email protected] > 0",
startOfDay as NSDate, endOfDay as NSDate)
return fetchRequest
}
et voici la fonction qui doit configurer la cellule et ne prendre que les événements qui ont la même date de la date sélectionnée :
func configuringCell(cell: CalendarAgendaCell, indexPath: IndexPath) {
for dates in calendar.selectedDates {
for dateOfEvent in myEventDate {
formatter.dateFormat = "dd MM yyyy"
let dateToCompare = formatter.string(from: dates)
formatter.dateFormat = "dd-MM-yyyy"
let comparingDate = formatter.date(from: dateToCompare)!
if dateOfEvent == dateToCompare {
myTempEvents = try! context.fetch(agendaEventsWithDate(date: comparingDate))
let myEvent = myTempEvents[indexPath.row]
cell.configureCell(agendaEvent: myEvent)
} else {
// the array is empty
}
}
}
}
Etes-vous en train de dire cette date dans les données de base a hh: mm: ss et vous voulez qu'il supprime en comparant dans le prédicat? –
@SandeepBhandari oui exactement. Dans les données de base est également stocké avec le temps. Quand je l'utilise dans le prédicat pour le comparer je voudrais que la date soit sans le temps – Marco
@SandeepBhandari :) Merci! – Marco