我有一个NSMutableArray被调用allItems,它有以下ProductData对象.
每个对象都有cid, cname, ctype和cimage.如下所示,json对象没有按顺序排列.但是,cid是订购的指标.
我想知道您如何根据cid订购?
[
{
"cid": "2",
"cname": "Meats",
"ctype": "main",
"cimage": "baked_chicken.jpg"
},
{
"cid": "1",
"cname": "Dips",
"ctype": "side",
"cimage": "stuffed_eggplant.jpg"
},
{
"cid": "4",
"cname": "Sandwiches",
"ctype": "sand",
"cimage": "chickenshawarma.jpg"
},
{
"cid": "3",
"cname": "Appetizers",
"ctype": "side",
"cimage": "rice_lentils.jpg"
},
{
"cid": "5",
"cname": "Desserts",
"ctype": "dsrt",
"cimage": "cake.jpg"
}]
Run Code Online (Sandbox Code Playgroud)
如果我使用它sortDescriptior,它部分工作.我面临的问题,当它排序时,它首先显示cid1然后显示cid10然后显示cid2.
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"cid" ascending:YES];
[allItems sortUsingDescriptors:@[sortDescriptor]];
Run Code Online (Sandbox Code Playgroud)
使用带有比较器传递compare:options:和选项的排序描述符NSNumericSearch:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"cid" ascending:YES comparator:^(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
Run Code Online (Sandbox Code Playgroud)
甚至更简单:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"cid" ascending:YES selector:@selector(localizedStandardCompare:)];
Run Code Online (Sandbox Code Playgroud)
localizedStandardCompare 是一个特殊的比较选择器:
只要文件名或其他字符串出现在适合类似Finder的排序的列表和表中,就应该使用此方法.在不同的语言环境下,此方法的确切排序行为是不同的,并且可能在将来的版本中进行更改.此方法使用当前区域设置.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |