[英]CoreData NSPredicate with many-to-many relationship
我已經建立了一個人/標簽關系模型。 這是多對多的關系。 一個人可以有多個標簽,並且一個標簽可以與多個人相關聯。
我正在嘗試運行一個查詢,以查看得到的人的列表,這些人已經用一組標簽的每個標簽進行了標簽。 例如:每個被標記為“ FOO”和“ BAR”的人。
這是我嘗試的代碼,但沒有成功。
NSPredicate *attributePredicate = [NSPredicate predicateWithFormat:
@"ALL personTags.tagName in %@", filtersArray];
[subPredicates addObject:attributePredicate];;
有沒有辦法解決? 我正在使用SqlLite作為持久性存儲。 我在數據庫中大約有2000個人,大約有100個不同的標簽,只有幾個標簽可以同時應用。
反向查詢並詢問“%@自身”的標簽,然后可以對結果數組執行KVC操作,例如:
NSArray *array = [results valueForKeyPath:@"@distinctUniionOfArrays.person"];
這將為您提供所需的結果。 請注意,這是在我的iPad上鍵入的,因此可能出現錯別字。
請參閱有關此主題的文檔
抱歉,我看錯了問題。 我建議嘗試一個子查詢。 如果無法訪問您的數據結構,則很難對其進行測試以使其完全正確,但是此代碼應使您走上正確的道路:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(SUBQUERY(self.tags, $tag, ALL $tag.name in %@).count > 0)", tagNameArray]];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
NSAssert2(error == nil, @"Error fetchings tags: %@\n%@", [error localizedDescrption], [error userInfo]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.