I have a bookingDate attribute, and I am trying to apply two different conditions for fetching based on bookingDate.
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:@"cab.@count != 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];
But its not functioning as expected. I don't understand why. Kindly guide.
You said that you want all booking (confirmed/cancelled) which are in future, and only cancelled bookings which are before today's date. Try following predicate for that.
NSPredicate *futureBookings = [NSPredicate predicateWithFormat:@"bookingDate > %@", [NSDate date]];
NSPredicate *cancelledPreviousBookings = [NSPredicate predicateWithFormat:@"bookingDate < %@ AND cab.confirmationStatus == 1", [NSDate date]];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[futureBookings, cancelledPreviousBookings]];