[iOS] NSTaggedPointerString 排序问题

最近项目中返回地址的分组排序发生错乱的情况,后台返回的城市信息,是放在一个一个大的字典内,使用缩写(例如:B)作为 Key,而对应的城市数组为 value 来组织数据的,大概就类似下面这样:

cityList =         (
                        {
                B =                 (
                                        {
                        citucode = 110;
                        cityname = "北京市";
                    }
                );
                C =                 (
                                        {
                        citucode = 220;
                        cityname = "长春市";
                    },
                                        {
                        citucode = 341;
                        cityname = "池州市";
                    },
                                        {
                        citucode = 430;
                        cityname = "长沙市";
                    },
                                        {
                        citucode = 430;
                        cityname = "常德市";
                    },
                                        {
                        citucode = 500;
                        cityname = "重庆市";
                    },
                                        {
                        citucode = 510;
                        cityname = "成都市";
                    }
                );
           }
      )

这里就不吐槽这样组织数据的意义了,真的是无力吐槽,还得在前端进行一次排序。

我这里的做法是,取出字典的所有 Keys,然后对Keys 进行排序:

NSArray * cityListArray = [data objectForKey:@"cityList"];
            NSDictionary *dic = [cityListArray firstObject];
            NSMutableArray *keys = dic.allKeys;  
            NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
                
                if (obj1 > obj2) {
                    return NSOrderedDescending;
                }else{
                    return NSOrderedAscending;
                }
            }];

在之前,一直没有问题,最近则出现顺序不对的情况,看了N多遍没有发现问题,后来想到是不是Keys的类型不对,控制台输出看了下:

(lldb) po [obj1 class]
NSTaggedPointerString

(lldb) 

发现,里面的对象是 NSTaggedPointerString 类型的,而不是常用的 NSString 类型,查了下资料,大致知道是为了节省内存,将较小的值和其内存地址放在了一起,该类为 NSString 的子类,详细内容参考iOS Tagged Pointer

目前不清楚为什么 NSTaggedPointerString 使用 > 进行比较会出错,后来改为如下的方式进行比较:

 NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {

               return [obj1 compare:obj2];
            }];

就能正常的进行排序了,如果有知道原因的,还请能够告知,感谢!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,679评论 1 32
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,395评论 0 7
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,986评论 1 9
  • 身份很微弱,语言得不到回应,做空的行动,赌注没有预测明天。 上午很漫长,轻松面对没想象中简单,甚至坚持不了几秒。躺...
    待明倾角阅读 209评论 0 0
  • 主要用于模拟用户的操作 from selenium import webdriver from selenium....
    想_上天阅读 470评论 0 0

友情链接更多精彩内容