我正在构建的应用程序有很多表。我正在加载前 15 行的数据,当用户向下滚动时,我将获得下一批 15 行。
我已经编写了一些接受“计数”和“跳过”的 DBAccess 函数。初始加载表时,count = 15,skip = 0。当用户滚动时,count = 15,skip = [array count];
代码是这样的:
- (void)getDataWithCount:(NSInteger)count withSkip:(NSInteger)skip
{
if (skip == 0)
self.dataArray = [[NSMutableArray alloc]init];
[DBAccess getData:self.dataArray withCount:count withSkip:skip handler:^(void)
{
if (no error)
[table reloadData];
}];
}
在非常慢的网络连接上(例如,索引 16 超出空数组。numberOfRowsInSection 返回 [数组计数])时,我在 cellForRowAtIndexPath 中得到数组越界崩溃。
我认为问题如下:
0) 进入画面。
1)加载15行
2)向下滚动,加载另一个 15。连接速度慢,所以我还没有从我的 sendAsynchronousRequest db 调用中得到回调
3)转到另一个视图控制器(即,离开屏幕。我可以这样做,因为异步不会冻结我的屏幕)。
4) 回到屏幕上。加载初始屏幕设置skip = 0,因此初始化我的可变数组,命中数据库
5) 从第 2 步命中的数据库返回。我的可变数组现在从第 4 步开始设置为零。当重新加载表时,它试图获取 self.dataArray objectAtIndex:16 等,当数组现在从 if(skip == 0)initialise 为空时
这看起来对吗?如果 numberOfRowsInSection 返回 [array count]; 是否有任何其他原因导致我的数组超出范围?有没有首选的方法来解决这个问题?