1
我有類似下面的模式:如何根據核心數據中的子關係計數進行排序?
我想查詢已經喜歡上了一定PAGEID帖子的所有用戶。我只想在User.liked中返回與給定pageId匹配的帖子。此外,我希望它按User.liked的數量排序。
我可以一次完成這一切嗎?
到目前爲止我的代碼:
NSFetchRequest* userFetch = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(liked, $x, $x.page.pageId = %@)[email protected] > 0)", self.pageId];
[userFetch setPredicate:predicate];
NSArray *allUsers = [_document.managedObjectContext executeFetchRequest:userFetch error:nil];
能正確只給我說,至少有一個喜歡的網頁,但可能包括來自User.liked其他頁面帖子的用戶對象。此外,它沒有排序。
我可以按這樣做後取:
_users = [allUsers mutableCopy];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"[email protected]" ascending:NO];
_users = [[_users sortedArrayUsingDescriptors:@[sortDescriptor]] mutableCopy];
但是,這一切SLOOOOOOOWS下來。如果在抓取中沒有辦法進行排序,我怎樣才能加快排序後取回的速度?
我是一個CoreData newb,當我像這樣陷入困境時,我通常最終只會拋棄CoreData,並開始通過將我的NSObjects序列化到磁盤來管理數據。任何提示之前,我在這裏做?
謝謝!
不幸的是,你不能使用@語法排序與多對多關係。 :( – pj4533
此外,據我所知SUBQUERY只是評估真/假,不是嗎?所以基本上,它會返回用戶對象,或不,它不會過濾它。 '無論如何都會擴展爲'=='。 – pj4533
嘗試看到這個主題http://stackoverflow.com/questions/6890079/subquery-in-core-data特別檢查出的評論唯一的答案。對我來說,似乎除了需要進行排序 – makaron