Я получаю этот необязательный (SUBQUERY (повестки дня, $ a, $ a.dates> = CAST (526860000.000000, "NSDate") И $ a.dates <CAST (526946400.000000, "NSDate")). @ Count> 0)

меня есть объект с именем Agendadate и один с именем AgendaEvent. AgendaEvent имеет отношение многие ко многим с AgendaDate (повестки дня).

в моей AgendaDate у меня есть объект даты (типа Дата).

Я использую предикат так:

fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.dates == %@", date as CVarArg)

Я пытаюсь отформатировать даты, чтобы иметь это:

"дд ММ гггг" вместо "гггг ММ дд чч: мм: сс"

Мне нужно сравнить в предикате две даты, но без времени? Является ли это возможным?

ОБНОВЛЕНИЕ ----- Вот моя функция обновлена, как вы предложили:

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
}

и вот функция, которая должна настраивать ячейку и принимать только события, которые имеют одинаковую дату выбранной даты:

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

            }
        }
    }
}
 Marco14 сент. 2017 г., 13:21
@SandeepBhandari :) Спасибо!
 Marco14 сент. 2017 г., 13:20
@SandeepBhandari да, именно так. В основном данные хранятся также со временем. Когда я использую это в предикате, чтобы сравнить это, я хотел бы, чтобы дата была без времени
 Marco14 сент. 2017 г., 14:01
хорошо .. все равно спасибо за попытку! :)
 Sandeep Bhandari14 сент. 2017 г., 14:00
Извини, приятель, я не мог помочь
 Sandeep Bhandari14 сент. 2017 г., 13:19
Вы говорите, что дата в основных данных имеет чч: мм: сс, и вы хотите, чтобы она была удалена при сравнении в предикате?

Ответы на вопрос(1)

Решение Вопроса

получить все записи, относящиеся к объекту Agendadate с датой того же дня, что и данный день.

Итак, вы сначала вычисляете начало и конец этого дня:

let date = Date()

let cal = Calendar.current
let startOfDay = cal.startOfDay(for: date)
let endOfDay = cal.date(byAdding: .day, value: 1, to: startOfDay)!

Тогда используйте эту подписку:

let predicate = NSPredicate(format: "SUBQUERY(agendaDates, $a, $a.dates >= %@ AND $a.dates < %@)[email protected] > 0",
                            startOfDay as NSDate, endOfDay as NSDate)

Это тесты$a.dates >= startDate AND $a.dates < endDate для всех связанных объектов и возвращает true, если хотя бы один соответствует условию.

 Marco14 сент. 2017 г., 14:48
Спасибо за Ваш ответ. Наверное, я не совсем понял. То, что я пытаюсь сделать, это добавить в массив все AgendaEvent, которые имеют конкретную дату повестки дня. Так что в основном я выбираю дату. Если дата совпадает с датой, которая присутствует в повестки дня, то я хотел бы сохранить эти AgendaEvent в массиве. Может быть, я делаю что-то не так, но если я добавлю ваше решение, то это займет все AgendaEvent. Я отредактирую свой вопрос, чтобы вы могли увидеть мой код. Спасибо
 Martin R14 сент. 2017 г., 15:39
Что значитprint(fetchRequest.predicate) шоу?
 Marco14 сент. 2017 г., 15:33
Извините .... опечатка. Я закомментировал старый. В коде твой запущен
 Martin R14 сент. 2017 г., 15:30
@Marco: Мой предложенный предикат должен сделать это. Я заметил, что в вашем коде назначение предиката закомментировано:// fetchRequest.predicate = ..., так что все возражения извлекаются.
 Marco14 сент. 2017 г., 15:47
Я получаю этот необязательный (SUBQUERY (повестки дня, $ a, $ a.dates> = CAST (526860000.000000, "NSDate") И $ a.dates <CAST (526946400.000000, "NSDate")). @ Count> 0)

Ваш ответ на вопрос