[英]Core Data fetching data of one to many relationship
我是Core Data的新手。 我有兩個實體場地和音樂會,以及兩個關系音樂會(從場地到音樂會)和場地(從音樂會到場地)。 我要做的基本上是檢索兩個日期(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 {%@,%@}).@count>0",startDate,endDate];
問題在於,它僅對場館執行過濾:僅檢索具有音樂會的場館,該場館的日期包含在startDate和endDate之間,但未過濾相關的音樂會。 我要實現的是在音樂會上進行此過濾以及過濾。 例如,我有兩個與音樂會相關聯的場地(示例中僅顯示日期):“愛爾蘭酒吧”->>(01-04-2013,02-04-2013,03-04-2013,04-04-2013 )“英語酒館”->>(2013年5月4日)
如果我的謂詞的startDate和endDate分別為02-04-2013和04-04-2013,則結果應為:
“愛爾蘭酒吧”->>(02-04-2013,03-04-2013,04-04-2013)
正如Rob提到的,您的錯誤消息說您沒有n謂詞。
因此,在發出請求之前,請放置日志並檢查謂詞值。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ALL concerts.startDate <= %@ AND concerts.endDate >= %@",startDate,endDate];
NSLog(@"my predicate is :%@",predicate);
也是我建議的良好做法,總是這樣
if(predicate!=nil){
//now make request here
}
讓我知道您是否需要更多幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.