FetchControllers中的自定义排序描述符

时间:2013-07-15 10:07:22

标签: objective-c core-data nssortdescriptor nsfetchedresultscontroller

我在核心数据中拥有一个事件权限 使用属性eventName,eventDate,eventLocation.I我正在使用SortDescriptors进行关键eventDate.I这里有一个问题我需要设置位置首选项,我需要根据位置排序而不是作为键而是值...对于Ex-suppose i将位置设置为“西雅图”,而不是所有具有位置的事件西雅图应首先显示。您是否知道如何使用FetchControllers进行此操作。请在回答之前阅读问题

我不想要

[NSSortDescriptor sortDescriptorWithKey:@"eventLocation" ascending:YES];

但是类似

[NSSortDescriptor sortDescriptorWithKey:@"eventLocation==Seattle" ascending:YES];

(这是错误的,我知道这是谓词格式)

1 个答案:

答案 0 :(得分:1)

@sheetal,你的情况类似于iPhone中的手机应用程序,其中联系人显示按姓氏升序排序,但#必须出现在最后(Z下方)。换句话说,我们首先要A B ... Z然后#。

顺便说一句,#代表那些以其他字符开头的姓氏,例如@myHome,133isACat,#puppy等。要获取部分,我们可以创建一个名为lastNameInitial的新Transient属性,并将其作为SectionNameKeyPath提供。如果isLastNameNumeric(在下面定义)为YES,则指定lastNameInitial = @“#”。否则,将姓氏的第一个字母(例如A,B等)分配给lastNameInitial。

如果我们在排序描述符数组中使用单个排序描述符,即一个基于Last Name Ascending的排序描述符,那么我们最终会在#A之前结束A.为了解决这个问题,我们可以定义一个名为isLastNameNumeric的瞬态属性( BOOL),对于“常规”姓氏(从AB ... Z开始)为0,对于所有其他名称如@myHome为1。基于isLastNameNumeric Ascending创建单独的排序描述符,并将其作为数组中的第一个排序描述符。将Last Name Ascending排序描述符设为第二个排序描述符,它将根据姓氏进行子分类。

重申一下,基于isLastNameNumeric Ascending的排序描述符仅用作不可见的助手。

类似的解决方案对您有用。但是,如果您的eventLocation可以更改(并不总是西雅图),那么实现此解决方案可能会更棘手。

如果有人有更好的想法,无论是首先显示A B ...... Z还是#,或者@patal的情况,我都是耳朵。

相关问题