1

我的拉动刷新有一个非常奇怪的错误。我有一个函数可以刷新我的表的数据。它由 pull to refreshon调用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 个或更多元素时才会发生这种崩溃(填满我的屏幕)

4

1 回答 1

6

保存 roomList 的缓存,以便您知道您正在更新它并且数据不是最新的。当你填满屏幕时它调用 cellForRowAtIndexPath 的原因是因为屏幕外的单元格出列。我不会在没有数据的情况下离开表格。此外,如果您没有编写拉动刷新控制器,它可能会调用 reloadTable。

于 2013-09-01T19:28:23.757 回答