Я - элемент данных Core Core. У меня есть два концерта «Концерт и концерт» и два концерта по отношениям (от места проведения до концерта) и места (от концертов до места проведения). То, что я хочу сделать, - это в основном получить все концерты для места, которое содержится между двумя датами (startDate-endDate).Основные данные, получающие данные от одного до многих отношений
NSPredicate *concertsToShow = [NSPredicate predicateWithFormat:@"ALL concerts.startDate <= %@ AND concerts.endDate >= %@",startDate,endDate];
NSManagedObjectContext *managedObjectContext = ((AppDelegate *)[[UIApplication sharedApplication]delegate]).managedObjectContext;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Venue" inManagedObjectContext:managedObjectContext]];
[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"concerts", nil]];
[request setPredicate:concertsToShow];
NSError *error = nil;
NSArray *concerts = [managedObjectContext executeFetchRequest:request error:&error];
return concerts;
Когда код запускается, я получаю следующее исключение:
, истекающее приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: 'неподдерживаемый предикат (нуль)' *
Я попытался также поставить скобки на предикат, но затем он говорит, что он не может разобрать предикат.
Я закончил с использованием подзапроса
NSPredicate *concertsToShow = [NSPredicate predicateWithFormat:@"SUBQUERY(concerts, $i, $i.startDate BETWEEN {%@,%@})[email protected]>0",startDate,endDate];
Проблема заключается в том, что он выполняет фильтрацию только на местах: он извлекает только те места, которые имеют концерт, который дата заключенный между StartDate и EndDate, но концерты связанные не фильтруются. То, что я хочу достичь, - это фильтрация фильтра PLUS на концертах. Так, например, у меня есть две достопримечательности с участием концертов (Только дата, показанная в примере): «Ирландский паб» - >> (01-04-2013, 02-04-2013,03-04-2013,04-04 -2013) "английский паб" - >> (05-04-2013)
Если STARTDATE и ENDDATE моего предиката соответственно 02-04-2013 и 04-04-2013 результат должен быть:
"Ирландский паб" - >> (02-04-2013,03-04-2013,04-04-2013)
Ну, ваша проблема ясна: предикат имеет значение null? Я не думаю, что вам нужно пойти на эту проблему, вы должны сделать предикат, который легко добавляет ваши ограничения. – Rob
Любая идея, почему предикат является нулевым? – ubiAle