Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中排序父和子CoreData元素_Ios_Arrays_Swift_Core Data_Higher Order Functions - Fatal编程技术网

Ios 如何在swift中排序父和子CoreData元素

Ios 如何在swift中排序父和子CoreData元素,ios,arrays,swift,core-data,higher-order-functions,Ios,Arrays,Swift,Core Data,Higher Order Functions,我的CoreData模型中有3个实体。类别、子类别、库存。库存连接到子类别,子类别使用关系连接到类别。因此,当我想要获取库存和子类别时,我使用的是类别数据。因此,我的问题是我想使用字母顺序对所有三个实体数据进行排序 class func getAllCategoriesObject() -> [DBCategories]? { let context = getContext() let fetchRequest:NSFetchRequest<

我的CoreData模型中有3个实体。类别、子类别、库存。库存连接到子类别,子类别使用关系连接到类别。因此,当我想要获取库存和子类别时,我使用的是类别数据。因此,我的问题是我想使用字母顺序对所有三个实体数据进行排序

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 []
    }
class func getAllCategoriesObject()->[DBCategories]?
{
let context=getContext()
let fetchRequest:NSFetchRequest=DBCategories.fetchRequest()
fetchRequest.returnsObjectsAsFaults=false
做{
让fetchedData=try context.fetch(fetchRequest).sorted(按:{(objCategory1,objCategory2)->Bool-in
(objCategory1.子类别?.AllObject作为[DBSubCategories]??[])。排序{(objSubCategory1,objSubCategory2)->Bool in
(objSubCategory1.inventory?.allObjects as?[DBInventory]??[])。排序{(objInventory1,objInventory2)->Bool in
返回objInventory1.title?.capitalized??“

我试过上面的代码,但没有得到输出。

你不能这样做-你不能用排序块对核心数据关系排序。 如果要实现字母顺序,可以使用以下工具:

NSSortDescriptor(key: [KEY NAME], ascending: true, selector: #selector(NSString.caseInsensitiveCompare))
如果您希望在一次获取中执行操作,则必须确保在保存核心数据对象时已对其进行排序-使用有序关系(您可以阅读更多相关信息)。 因此,当您获取父对象时,与SensorDeredSet关系连接的子对象已根据您的意愿进行排序

举个简单的例子:

//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
这样,数据就已经在数据库中进行了排序