2016-04-11 111 views
0

我有一个自定义对象数组,我从服务器获取。NSSortDescriptor以随机格式排序数据

我想根据成本对数据进行排序。他们是我阵列中的一个totalCost字段,其​​类型为NSString

现在我使用NSSortDescriptor这样的:

NSSortDescriptor *sortDescriptrCost; 
     sortDescriptrCost = [[NSSortDescriptor alloc] initWithKey:@"totalCost" 
                 ascending:YES]; 

    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptrCost,nil]; 
     NSArray *sortedArray = [unchnagedOriginalData sortedArrayUsingDescriptors:sortDescriptors]; 

现在,当成本超过100则排序好。但是,当数据包含costless than 100排序breaks.Here是输出:

这是排定的顺序我得到:

113--totalCost 
113--totalCost 
120--totalCost 
149--totalCost 
182--totalCost 
255--totalCost 
259--totalCost 
263--totalCost 
263--totalCost 
67--totalCost 
80--totalCost 
+2

,因为它的一个字符串,它将按ascii值而不是数值排序。 – hola

+2

不要将字符串排序,就好像它们是数字一样。 “8”>“6”>“1”,这就是为什么67之后,其次是80。 – Avi

+2

你的总成本看起来像它的一个字符串..所以试试看。改变你的键值为“totalCost.intValue”或“totalCost.integerValue” –

回答

1
NSArray *sortedArray; 
sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
    if ([a valueForKey:@"totalCost"] && [b valueForKey:@"totalCost"])  { 
     // Compare object values and return as per your expectations 
    } 
}]; 

这可能会帮助你肯定的