簡體   English   中英

如何快速排序父級和子級 CoreData 元素

[英]How to sorting parent and child CoreData element in swift

我的 CoreData 模型中有 3 個實體。Category ,Subcategory ,inventory.inventory 連接到子類別,子類別使用關系連接到類別。所以當我想獲得庫存和子類別而不是使用類別數據時。所以我的問題是我想使用字母順序對所有三個實體數據進行排序。

class func getAllCategoriesObject() -> [DBCategories]?
    {
        let context = getContext()

        let fetchRequest:NSFetchRequest<DBCategories> = DBCategories.fetchRequest()
        fetchRequest.returnsObjectsAsFaults = false

        do{
            let fetchedData = try context.fetch(fetchRequest).sorted(by: { (objCategory1, objCategory2) -> Bool in
                (objCategory1.subcategories?.allObjects as? [DBSubCategories] ?? []).sorted { (objSubCategory1, objSubCategory2) -> Bool in

                    (objSubCategory1.inventories?.allObjects as? [DBInventories] ?? []).sorted { (objInventory1, objInventory2) -> Bool in

                        return objInventory1.title?.capitalized ?? "" < objInventory2.title?.capitalized ?? ""
                    }

                    return objSubCategory1.title?.capitalized ?? "" < objSubCategory2.title?.capitalized ?? ""
                }

                return objCategory1.title?.capitalized ?? "" < objCategory2.title?.capitalized ?? ""
            })



            return fetchedData
        }
        catch
        {
            print( error.localizedDescription)
        }
        return []
    }

我試過上面的代碼但沒有得到輸出。

你不能那樣做——你不能用排序塊對核心數據關系進行排序。 如果你想實現字母順序,你可以這樣做:

NSSortDescriptor(key: [KEY NAME], ascending: true, selector: #selector(NSString.caseInsensitiveCompare))

如果您希望一次性完成,那么您必須確保在保存 Core Data 對象時已經對它們進行了排序 - 通過使用有序關系(您可以在此處閱讀有關它的更多信息)。 因此,當您獲取父對象時,與 NSOrderedSet 關系連接的子對象已經根據您的意願進行了排序。

舉個簡單的例子:

//Create context, create objects in context
let someChildsObject: [NSManagedObject] = //.. Objects with name property
someChildsObject.sorted(by: { $0.name > $1.name }) //Sorting according to name value
parent.children = NSOrderedSet(array: someChildsObject)
//Save context

通過這樣做,數據將已經在數據庫中排序。

暫無
暫無

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

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