2013-04-02 2 views
0

Я - элемент данных 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)

+2

Ну, ваша проблема ясна: предикат имеет значение null? Я не думаю, что вам нужно пойти на эту проблему, вы должны сделать предикат, который легко добавляет ваши ограничения. – Rob

+0

Любая идея, почему предикат является нулевым? – ubiAle

ответ

0

Как Роб упомянул, ваше сообщение об ошибке говорит, что вы всухую предикат.

поэтому поставьте лог и проверьте исходное значение перед тем, как сделать запрос.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ALL concerts.startDate <= %@ AND concerts.endDate >= %@",startDate,endDate]; 
NSLog(@"my predicate is :%@",predicate); 

также для надлежащей практики я хотел бы предложить, всегда делать так

if(predicate!=nil){ 
    //now make request here 
} 

дайте мне знать, если вам нужна дополнительная помощь в этом.

+1

Я бы добавил контрольную точку регистрации и просто добавил: po predicate. Но да, это идея! – Rob

+0

См. Редактирование вопроса. ура – ubiAle

Смежные вопросы