簡體   English   中英

核心數據獲取一對多關系的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM