我目前正在使用 MBProgressHUD 和 NSURLConnection 处理 tableview。问题是,例如,当用户位于第 80 行时,当用较少的数据刷新表时,只有 10 行存在,这个应用程序完全崩溃,因为用户正在查看的行导致第 80 行被释放 -内存访问错误。
我想确保无论用户在哪里,应用程序都不会崩溃。纠正这个问题的最佳方法是什么?:S
我目前正在使用 MBProgressHUD 和 NSURLConnection 处理 tableview。问题是,例如,当用户位于第 80 行时,当用较少的数据刷新表时,只有 10 行存在,这个应用程序完全崩溃,因为用户正在查看的行导致第 80 行被释放 -内存访问错误。
我想确保无论用户在哪里,应用程序都不会崩溃。纠正这个问题的最佳方法是什么?:S
@Bergasms 是对的,您的问题与正在滚动的表格无关,在这种情况下禁用它可能是不明智的(从设计角度来看)。话虽如此,您可以使用该scrollEnabled
属性并将其设置为NO
但是,要解决您的崩溃,您应该[self.tableView reloadData]
在数据源更新后立即调用。
您还tableView:numberOfRowsInSection:
应该从支持您的数据源的对象返回计数。
这是一个示例实现,它显示在滚动时更新数据源如果正确完成不会导致崩溃。
@interface CLViewController ()
@property (nonatomic, strong) NSMutableArray *stuffs;
@end
@implementation CLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.stuffs = [NSMutableArray array];
for (int i = 0; i <= 100; i++) {
[self.stuffs addObject:[NSString stringWithFormat:@"%d", i]];
}
int64_t delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.stuffs removeAllObjects];
for (int i = 0; i <= 10; i++) {
[self.stuffs addObject:[NSString stringWithFormat:@"%d", i]];
[self.theTableView reloadData];
}
});
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.stuffs.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"StuffCell"];
cell.textLabel.text = [self.stuffs objectAtIndex:indexPath.row];
return cell;
}
@end
这会将 100 行加载到数组中,该stuffs
数组viewDidLoad
在应用启动时可立即滚动。3 秒后,stuffs
数组被清空并加载了 10 个项目,[self.theTableView reloadData];
调用 next,交互有点颠簸,但基本上最后 90 行就消失了,一切都很好,没有崩溃。