我正在构建的应用程序有很多表。我正在加载前15行的数据,当用户向下滚动时,我得到下一批15行。DBAccess与异步
我已经写了一些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];
}];
}
我得到阵列出界的崩溃中的cellForRowAtIndexPath上很慢的网络连接(例如,索引16超出空数组numberOfRowsInSection返回[阵列计数])。
我觉得问题如下:
0)进入屏幕。
1)负载15行
2)向下滚动,加载另一个15.连接速度慢,所以我不从我sendAsynchronousRequest DB调用
3接到一个电话回来了)转到另一个视图 - 控制(即离开屏幕,我可以这样做,因为异步不会冻结我的屏幕)。
4)回到屏幕上。加载初始屏幕设置skip = 0,因此初始化我的可变数组,命中数据库
5)从步骤2返回的数据库命中。我的可变数组现在已经从第4步设置为零。重载表时,它试图获取self.dataArray objectAtIndex:16等,当数组现在为空时,从if(skip == 0)初始化
这似乎是正确的?任何其他原因,如果numberOfRowsInSection正在返回[数组计数];为什么我会有数组越界?有没有一个首选的方法来解决这个问题?