我有一个非常奇怪的错误,我的拉动刷新。我有一个函数刷新我的表的数据。通过拉动来调用viewWillAppear
上的和。同样的功能对后者完全正常,但在拉动刷新时会崩溃。这是我的'重置'功能
-(void)reset{
refreshList = nil;
isFiltered = NO;
currentRoom = nil;
[roomList removeAllObjects];
NSMutableURLRequest *newRequest=[NSMutableURLRequest requestWithURL:
[NSURL URLWithString:@"http://192.168.1.128:8080/DJService/room/list/"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[newRequest setHTTPMethod:@"POST"];
refreshList = [[NSURLConnection alloc] initWithRequest:newRequest
delegate:self];
}
现在,当运行pull来刷新时,它正在做什么。它直接转到cellForRowAtIndexPath
函数并在此行崩溃:
room = [roomList objectAtIndex:indexPath.row];
崩溃是因为roomList
为空并且尚未填充。我不明白的是,为什么当reloadData
尚未被调用时,它将用于此功能。从上面的代码中,建立一个url连接来获取新数据,然后该表应该在connectionDidFinishLoading
中重新加载,但是该函数从未被调用,实际上我的表或URL连接没有其他委托函数叫做。它直接进入cellForRowAtIndexPath
并尝试加载一个空列表....为什么这样做?
这个完全相同的函数(reset
)在viewWillAppear
中调用并且正常工作
令事情更令人困惑的是,只有当我的表格中有7个或更多元素(填满我的屏幕)时才会发生此崩溃
答案 0 :(得分:6)
保留roomList的缓存,以便您知道您正在更新它并且数据不是最新的。填充屏幕时调用cellForRowAtIndexPath的原因是因为屏幕外的单元格出列。我不会离开桌子没有数据拉。另外,如果你没有写pull to refresh controller,它可能会调用reloadTable。