uitableview]如何在数据完全加载之前阻止用户滚动?

时间:2013-01-22 00:33:19

标签: ios uitableview

我目前正在使用MBProgressHUD& amp; NSURLConnection的。 问题是,当用户位于第80行时,如果用较少的数据刷新表时只存在10行,则此应用程序完全崩溃,因为用户正在查看的行导致释放的第80行 - 内存访问错误。

我想确保无论用户在哪里,应用都不会崩溃。什么是纠正这个问题的最佳方法? :S

1 个答案:

答案 0 :(得分:1)

@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

这会在stuffs上的viewDidLoad数组中加载100行,该数组可立即在应用启动时滚动。 3秒后,stuffs数组被清空并加载了10个项目,下一个[self.theTableView reloadData];被调用,交互有点颠簸,但基本上最后90行消失了,一切都很好,没有崩溃。 / p>