1

У меня есть атрибут bookingDate, и я пытаюсь применить два разных условия для извлечения на основе bookingDate.Два предиката для одного и того же имущества в iOS

NSPredicate *confirmBookingPredicate = [NSPredicate predicateWithFormat:@"bookingDate > %@ AND ANY cab.confirmationStatus == 1 OR cab.confirmationStatus == 0", [NSDate date]]; 
    NSPredicate *cancelBookingPredicate = [NSPredicate predicateWithFormat:@"bookingDate < %@ AND bookingDate >= %@ AND ANY cab.confirmationStatus == 1", [NSDate date], [NSDate dateWithNoTime:[[NSDate date] dateByAddingTimeInterval:MINUSFORTYFIVEDAYS]]]; 

    NSPredicate *nilPredicate = [NSPredicate predicateWithFormat:@"[email protected] != 0"]; 
    NSPredicate *DatePredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[confirmBookingPredicate, cancelBookingPredicate, nilPredicate]]; 

    NSFetchedResultsController *fetchedResultsController; 

    NSFetchRequest *fetchRequest = [Trip MR_requestAllSortedBy:@"bookingDate" ascending:YES]; 
    [fetchRequest setFetchBatchSize:10]; 
    [fetchRequest setPredicate:DatePredicate]; 
    [fetchRequest setReturnsObjectsAsFaults:NO]; 
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_defaultContext sectionNameKeyPath:@"bookingId" cacheName:nil]; 

Но он не функционирует должным образом. Я не понимаю, почему. Незлое руководство.

+0

Что вы ожидаете от этого? Вы имели в виду «andPredicate» в этом случае? Если вы хотите совместить, по крайней мере, при условии, вы можете использовать 'orPredicate'. –

+0

Да, я имел в виду И предикат, и я хочу, чтобы все заказы (подтвержденные/отмененные), которые в будущем, и только отмененные заказы, которые до сегодняшней даты. – cheeseRoot

+0

'confirmBookingPredicate' хочет дату бронирования> текущая дата и' cancelBookingPredicate' хотят дату бронирования <текущая дата. Как эти два условия могут удовлетвориться в одном доступе? –

ответ

0

Вы сказали, что хотите все бронирования (подтвержденные/отмененные), которые в будущем, и только аннулированные заказы, которые до сегодняшней даты. Попробуйте следовать за этим предикатом.

NSPredicate *futureBookings = [NSPredicate predicateWithFormat:@"bookingDate > %@", [NSDate date]]; 
NSPredicate *cancelledPreviousBookings = [NSPredicate predicateWithFormat:@"bookingDate < %@ AND cab.confirmationStatus == 1", [NSDate date]]; 
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[futureBookings, cancelledPreviousBookings]]; 
+0

О, Боже, о чем я думал! (* лицоpalm) ThankYou так много. – cheeseRoot

+0

@ pRimei5 Это сработало для вас? Можете ли вы принять мой ответ? –