簡體   English   中英

具有多對多關系的CoreData NSPredicate

[英]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上鍵入的,因此可能出現錯別字。

請參閱有關此主題的文檔

http://developer.apple.com/mac/library/iPad/index.html#documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/ArrayOperators.html

更新

抱歉,我看錯了問題。 我建議嘗試一個子查詢。 如果無法訪問您的數據結構,則很難對其進行測試以使其完全正確,但是此代碼應使您走上正確的道路:

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.

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