【发布时间】:2014-07-14 23:50:08
【问题描述】:
我正在尝试按从坐标计算的距离按升序对表格视图进行排序。一切都像一个魅力,除了我无法按升序获得它,我一直在用 NSSortDescriptor 等,但不幸的是,任何帮助将不胜感激,这是我的代码:
- (void) retrieveData
{
NSURL *url = [NSURL URLWithString:jsonFile];
NSData *data = [NSData dataWithContentsOfURL:url];
_jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
_salesArray = [[NSMutableArray alloc]init];
for (int i = 0; i < _jsonArray.count; i++) {
NSString *sID = [[_jsonArray objectAtIndex:i] objectForKey:@"id"];
NSString *sName = [[_jsonArray objectAtIndex:i] objectForKey:@"name"];
NSString *sAddress = [[_jsonArray objectAtIndex:i] objectForKey:@"address"];
NSString *sPostcode = [[_jsonArray objectAtIndex:i] objectForKey:@"postcode"];
__block NSString *distance;
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder geocodeAddressString:sPostcode completionHandler:^(NSArray *placemarks, NSError *error) {
if (error == nil && placemarks.count > 0) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
CLLocation *location = placemark.location;
CLLocation *myLocation = self.manager.location;
CLLocationDistance miles = [location distanceFromLocation:myLocation];
//this is the variable i want in my convenience init.
distance = [NSString stringWithFormat:@"%.1f m", (miles/1609.344)];
}
}];
[_salesArray addObject:[[sales alloc] initWithSales:sID andName:sName andAddress:sAddress andPostcode:distance]];
}
[_salesArray sortUsingComparator:
^NSComparisonResult(id obj1, id obj2){
sales *p1 = (sales *)obj1;
sales *p2 = (sales *)obj2;
if (p1.postcode > p2.postcode) {
return (NSComparisonResult)NSOrderedDescending;
}
if (p1.postcode < p2.postcode) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}
];
[self.tableView reloadData];
}
【问题讨论】:
-
我看不到您要在哪里进行排序。此外,您应该阅读
geocodeAddressString:completionHandler:上的文档,因为您在使用它时犯了许多错误。 -
您需要对
_salesArray数组进行排序,以便在填充单元格时对象在数组中的顺序正确。您尝试对数组进行排序的代码在哪里? -
customCell.distance.text 显示了 tableview 中的所有距离,除了它不是按顺序排列的,这是我要按升序排序的,_salesArray 包含名称和邮政编码,我正在将邮政编码转换为坐标然后计算与我所在位置的距离,@CarlVeazey 我将阅读 geocodeaddressString,那里没有尝试按升序对 customCell.distance.text 进行排序的代码,我希望你们能对此有所帮助。欢呼
-
为什么不对数组进行排序取决于名称在 cellRowAtIndex 之外的距离并再次重新加载 tableview?
-
@silly_cone,您不会“排序”表格视图的单元格。您必须对数据源 (
_salesArray) 在 将其提供给表格视图进行排序。这也意味着您必须在对数组进行排序之前计算_salesArray中每个项目的距离。
标签: ios uitableview sorting nssortdescriptor