【问题标题】:NSSortdescriptor not mixing listsNSSortdescriptor 不混合列表
【发布时间】:2023-03-09 11:50:02
【问题描述】:

我有一个应该按名称排序的数组,但只有一半被排序。我有一个条目列表,可以分为两部分,第一部分来自字典,只有属性“名称”,第二部分来自核心数据数据库,还有属性“addByUser” .这两个列表都在 tempArray 内并被添加到 _resultsarray 中,然后直接导致 cellForRowAtIndexPath。但在此之前,我尝试按名称对 _resultsarray 进行排序。现在问题出现了:首先出现没有 addedByUser 属性的列表(按名称排序),然后出现另一个列表(带有 addedByUser 属性”),也按名称排序。我无法将它们混合在一起。

[_resultsarray addObjectsFromArray:tempArray];

// Sort the list
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[_resultsarray sortUsingDescriptors:[NSArray arrayWithObject:sort2]];

我做错了什么?谢谢!

更新:非常抱歉,我忘了写 tempArray 和 _resultsarray 都是可变数组。

更新 2:如果名称以大写或小写字符开头,似乎会有所不同。那么我更新的问题是,有没有办法对 NSMutableArray 进行排序,无论单词是以大写还是小写字符开头?

更新 3:我发现:

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];

【问题讨论】:

    标签: ios xcode nsarray nssortdescriptor


    【解决方案1】:

    你应该写一个NSComparoator,比如:

    _resultsarray = [tempArray sortedArrayUsingComparator:^(id firstObject, id secondObject) {
        NSString *name1 = ... ; // firstObject.name or firstObject.addedByUser
        NSString *name2 = ... ; // secondObject.name or secondObject.addedByUser
        return [name1 compare:name2];
    }];
    

    【讨论】:

      【解决方案2】:

      试试这个:

      NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
      _resultsarray = [tempArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort2]];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 2023-03-02
        • 2017-03-18
        • 2018-06-27
        相关资源
        最近更新 更多