拉到刷新表时崩溃

时间:2013-09-01 19:23:50

标签: ios objective-c cocoa-touch uitableview

我有一个非常奇怪的错误,我的拉动刷新。我有一个函数刷新我的表的数据。通过拉动来调用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个或更多元素(填满我的屏幕)时才会发生此崩溃

1 个答案:

答案 0 :(得分:6)

保留roomList的缓存,以便您知道您正在更新它并且数据不是最新的。填充屏幕时调用cellForRowAtIndexPath的原因是因为屏幕外的单元格出列。我不会离开桌子没有数据拉。另外,如果你没有写pull to refresh controller,它可能会调用reloadTable。