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

Ios uitableview]如何防止用户在数据完全加载之前滚动?,ios,uitableview,Ios,Uitableview,我目前正在使用MBProgressHUD和NSURLConnection处理tableview。 问题是,例如,当用户位于第80行时,当使用较少的数据刷新表时,只有10行存在,此应用程序完全崩溃,因为用户正在查看的行导致发布的第80行-内存访问错误 我想确保无论用户在哪里,应用程序都不会崩溃。纠正此问题的最佳方法是什么S@Bergasms是正确的,您的问题与正在滚动的表无关,在这种情况下禁用它可能是不明智的(从设计角度来看)。也就是说,您可以使用该属性并将其设置为NO 但是,要解决崩溃问题,应在

我目前正在使用MBProgressHUD和NSURLConnection处理tableview。 问题是,例如,当用户位于第80行时,当使用较少的数据刷新表时,只有10行存在,此应用程序完全崩溃,因为用户正在查看的行导致发布的第80行-内存访问错误


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

@Bergasms是正确的,您的问题与正在滚动的表无关,在这种情况下禁用它可能是不明智的(从设计角度来看)。也就是说,您可以使用该属性并将其设置为
NO

但是,要解决崩溃问题,应在数据源更新后立即调用
[self.tableView reloadData]

另外,您的
表视图:numberofrowsinssection:
应该返回支持数据源的对象的计数

下面是一个示例实现,它显示在滚动时更新数据源不会导致崩溃(如果操作正确)

@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
@接口CLViewController()
@属性(非原子,强)NSMutableArray*Stuff;
@结束
@CLViewController的实现
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
self.stuffs=[NSMutableArray];

对于(int i=0;i这似乎与表视图无关。如果重新加载时信息较少,则表视图应仅滚动到最下面一行的位置。您是否可以发布您收到的错误日志。我以前不知道:)也非常感谢你!!你是对的。这是我的一个数组造成的问题,而不是表本身。更新图像数组比重新加载tableview慢,这就是内存访问不好的原因。非常感谢你!