我有一个tableview,其内容是用json数组生成的。它还使用位置服务,以便在用户位置发生变化时,重新加载表以反映表数据相对于用户位置的变化。
我的问题是我在视图加载的开头显示活动指示符,但每次位置更新和表重新加载时,都会显示指示符。这是在非常短的时间间隔内完成的,导致应用程序崩溃。
是否可以将一个条件放到下面的代码中,以便它不会显示MBProgressHUD,如果它不是初始加载但是由位置更改导致重新加载?
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
[HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];
return [rows count];
}
这是重新加载的地方:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSString *lat = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
NSString *longt = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];
//CGFloat Alat = [lat floatValue];
//CGFloat Alon = [longt floatValue];
self.aalat = lat;
self.aalon = longt;
// NSLog(@"anlat: %@", aalat);
// NSLog(@"anlong: %@", aalon);
[[NSUserDefaults standardUserDefaults] setObject:aalat forKey:@"latitude"];
[[NSUserDefaults standardUserDefaults] setObject:aalon forKey:@"longitude"];
[tableview reloadData];
}
答案 0 :(得分:1)
我会从viewDidLoad或viewWillAppear方法触发HUD,以便最初加载。从tableview开始会给你带来很多问题。用户滚动时会反复触发tableview方法,因此您将始终遇到问题。
从您的位置更新中触发方法以显示HUD。它必须在主线程上运行才能使动画正常工作。我会用你的新方法调用reload表来避免你的tableview出现任何问题。