我对iOS开发很新。我遇到了问题。
我想在自定义的tableview上订购UITableView
Descending by Distance。
我通过我的parse.com数据库查询获取日期。
然后,在创建单元格时,我从数据库对象计算当前位置与地理位置位置之间的距离。 - >这很好用!
但是如何按计算的距离命令TableView下降/上升?
这是我的代码,我在其中创建单元格并计算距离:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
{
static NSString *simpleTableIdentifier = @"stationCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
// Configure the cell
PFFile *thumbnail = [object objectForKey:@"img"];
PFImageView *thumbnailImageView = (PFImageView*)[cell viewWithTag:100];
thumbnailImageView.image = [UIImage imageNamed:@"placeholder.jpg"];
thumbnailImageView.file = thumbnail;
[thumbnailImageView loadInBackground];
UILabel *nameLabel = (UILabel*) [cell viewWithTag:101];
nameLabel.text = [object objectForKey:@"name"];
UILabel *adressLabel = (UILabel*) [cell viewWithTag:102];
adressLabel.text = [object objectForKey:@"adress"];
// DISTANCE Calculation
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *currentLocationGeoPoint, NSError *error) { //Get current Location
if (!error) {
PFGeoPoint *distanceGeoPoint = [object objectForKey:@"location"];
double distanceDouble = [currentLocationGeoPoint distanceInKilometersTo:distanceGeoPoint];
NSLog(@"Distance: %.1f",distanceDouble); // %.1f - limits to 1.1
UILabel *distanceLabel = (UILabel*) [cell viewWithTag:103];
distanceLabel.text = [NSString stringWithFormat:@"%.1f", distanceDouble];
}
}];
return cell;
}
答案 0 :(得分:0)
在cellForRowAtIndexPath
中对行进行排序已经太晚了,该方法在何时被调用
细胞即将显示。
您应该在获取元素之后对它们进行排序,并将排序的数组用作表视图数据源。
答案 1 :(得分:0)
将您的模型数据(MVC)与您的视图更新(cellForRowAtIndexPath
中的代码)分开。即不要从geoPointForCurrentLocationInBackground
致电cellForRowAtIndexPath
。做一次并获取所有位置数据。
现在,您应该拥有一系列位置数据。在cellForRowAtIndexPath
中,您可以使用indexPath
从该数组中获取数据。
如果要更改结果的顺序,请反转数组。 (通常使用reverseObjectEnumerator
)。
答案 2 :(得分:0)
谢谢你! 我将MVC和视图更新分开了。 然后我更改了初始查询并使用以下函数按距离排序结果:
[query whereKey:@"location" nearGeoPoint:userGeoPoint];
http://parse.com/docs/ios/api/Classes/PFQuery.html#//api/name/whereKey:nearGeoPoint: