簡體   English   中英

使用NSSortDescriptor通過多對多關系獲取CoreData

[英]CoreData fetch with NSSortDescriptor by count of to-many relationship

我有2個CoreData實體(Person,Pet),它們具有以下關系:

一個人可以有多個寵物。 因此,Person-> Pet存在To-Many關系。

我想取所有的人,根據寵物的數量排序,他們擁有寵物最多的人是第一個,寵物最少的人是最后一個。

在獲取人員列表時,我嘗試使用如下的NSSortDescriptor:

[NSSortDescriptor sortDescriptorWithKey:@"pets.count" ascending:NO]

我認為“人”上的“寵物”屬性允許我使用NSSet的count屬性進行排序。 唉,CoreData抱怨這個錯誤:

Fetch exception to-many key not allowed here

這是一個完全錯誤的方法嗎? 我怎么能用CoreData fetch做這樣的事情?

在此先感謝您的幫助。

嘗試使用集合運算符

[NSSortDescriptor sortDescriptorWithKey:@"pets.@count" ascending:NO]

這不能直接應用(對於獲取請求),您需要執行fetch,然后對結果數組運行排序( sortedArrayUsingDescriptors:

如果要在獲取時進行排序,則需要向保存計數編號的實體添加(非瞬態)屬性。

看看這個答案https://stackoverflow.com/a/20317087/2567126

基本上,您在NSManagedObject上創建持久屬性,並在從關系中添加或刪除子對象時更新屬性計數。

將密鑰的格式更改為@"pets.@count"

我還需要在Swift中做同樣的事情。 我只想跟隨:

  1. 從CoreData獲取請求而不使用'count'鍵值。
  2. 我對獲取的結果執行了排序(高階函數)。
allCategory.sort { (category1, category2) -> Bool in
            return category1.tasks?.count > category2.tasks?.count
        }

這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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