如何使用布尔比较形成NSSortDescriptor

时间:2018-03-22 03:19:33

标签: ios swift sorting core-data nssortdescriptor

我从核心数据数据库中获取具有多个属性的iOS应用程序的对象,在我的第三个排序键上,我想按职位分类排序,按字母顺序升序,但是扭曲了& #34;椅" (即部门主席的职位)在所有其他职称(甚至是按字母顺序排在前面的职位)之前排序。我下面的代码试图使用第三个排序描述符来排序"主席"在使用布尔值的所有其他教师职位之上,然后第4个排序描述符按字母顺序排列所有职位(即除#34;主席"之外的所有职称之间的排序)。

原样,我在第三个描述符上遇到错误,尝试了我能想到的各种语法排列。

如果我注释掉第三个描述符,那么一切都可以正常工作。我得到了很好的结果, 除了 主席的职称按字母顺序排列(所以"辅助"然后"主席"然后"名誉"等等)。我强烈要求 - 在应用了第一个和第二个排序键之后 - 用于排序"主席"首先和然后" Ajunct","名誉"等

我应该如何编写第三个排序描述符来实现这一目标?

我怀疑this questionthis question可能会达到此目的,但这两者的答案都在目标C中,而且我无法完全遵循这一点来了解我&# 39; d将这些解决方案中的任何一个转换为Swift。

func allProjects() -> [Projects] {
    // fetches the array of Projects from Core Data & returns it.
    do {
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Projects")

        // Order that I want to sort:
        // 1 First by Month/Year (expressed as an Int32, 201803 = March 2018, for instance
        // 2 then by Department (Astrology then Biology then Chemistry then Economics then etc)
        // 3 then by departmentPosition = “Chair” — put the Chairman’s project(s) first
        // 4 then by departmentPosition — everybody ELSE in alpha order: Adjunct > Emeritus > Lecturer > etc
        // 5 then by Industry Partner in alphabetical order

        let sortDescript1 = NSSortDescriptor(key: "yearMonthInt", ascending: false)
        let sortDescript2 = NSSortDescriptor(key: "department", ascending: true)
        let sortDescript3 = NSSortDescriptor(key: "{departmentPosition == ‘Chair’}", ascending: false).  // Problem is here
        let sortDescript4 = NSSortDescriptor(key: "departmentPosition", ascending: true)
        let sortDescript5 = NSSortDescriptor(key: "industryPartner", ascending: true)

        fetchRequest.sortDescriptors = [sortDescript1, sortDescript2, sortDescript3, sortDescript4, sortDescript5]

        do {
            let fetched = try myContext.fetch(fetchRequest) as! [Projects]
            return fetched
        }
    } catch {
        fatalError("Couldn't fetch [Projects]: \(error)")
    }
}

编辑1:一个不起作用的想法

评论中建议比较必须

let sortDescript3 = NSSortDescriptor(key: "departmentPosition", ascending: true, comparator: myComparator)

问题是,这也会产生错误(CoreData: error: exception handling request: <NSSQLFetchRequestContext: 0x7b3400037e90> , unsupported NSSortDescriptor (comparator blocks are not supported)),并且搜索该错误的文本会出现this question/answer,这表明您不能使用带有Core的比较器块数据

0 个答案:

没有答案