【问题标题】:Using NSSortDescriptor to keep 'nil' values at the bottom of a list使用 NSSortDescriptor 将“nil”值保留在列表底部
【发布时间】:2014-02-08 08:40:01
【问题描述】:

我正在对NSFetchedResultController 数据进行排序。我需要按他们的名字对数据进行排序。但是,有些条目没有名字。

我需要“没有名字”的对象出现在列表的底部,而不是顶部。使用当前代码,当我按名字对列表进行排序时,“无名字”单元格位于顶部。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contacts"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES]];
_FRC = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                            managedObjectContext:MOC
                                           sectionNameKeyPath:nil cacheName:nil];   
_FRC.delegate = self;

【问题讨论】:

    标签: ios core-data nsfetchedresultscontroller nssortdescriptor


    【解决方案1】:

    在与同事协商后更新:)

    首先,您是在谈论“空白”(如在其中包含空格的字符串中)还是“nil”(完全没有值的属性)?

    想到的一个想法是添加一个名为hasFirstNameBOOL,然后首先对hasFirstName 进行排序,然后对firstName 进行排序。

    【讨论】:

      【解决方案2】:

      NSSortDescriptorsortDescriptorWithKey:ascending:comparator: 方法。使用此方法,您可以进行自定义比较并将空项目移动到底部。比较器块可能如下所示:

      ^NSComparisonResult(NSString *obj1, NSString *obj2) {
           if (obj1.length == 0) {
               return NSOrderedDescending;
           }
           if (obj2.length == 0) {
               return NSOrderedAscending;
           }
      
           return [obj1 compare:obj2];
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2013-02-14
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多