JH9*_*H95 0 objective-c uitableview nsarray ios
我有一个UITableView在第一次调用时加载其数组项目.但是,当我刷新tableview时它会崩溃,因为委托方法cellForRowAtIndexPath被提前调用.我有一个整数,表示我的主数据数组的索引,并在我的刷新按钮中重置为0.然而它崩溃是因为它试图在重置之前重新加载数据.我通常会使用indexPath.row作为我的索引,但是数组很复杂,而indexPath.row与我想要为每个单元格显示的内容不匹配.下面是一些代码,任何帮助表示赞赏.
当我下拉刷新AND viewDidLoad以准备数据时,会调用此方法
- (IBAction)refresh:(id)sender {
itemIndexer = 0;
[sender beginRefreshing];
[self loadData];
}
Run Code Online (Sandbox Code Playgroud)
我的loadData方法的一部分
-(void) loadData {
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.Foo.myqueue", 0);
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(backgroundQueue, ^{
[self downloadData];
dispatch_async(mainQueue, ^{
[self.tableView reloadData];
[_rcRefresh endRefreshing];
});
});
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad中我调用最初加载tableview:
[self refresh:_rcRefresh];
Run Code Online (Sandbox Code Playgroud)
我得到一个超出数组错误范围的索引.我使用断点来确定原因,原因很简单,因为刷新没有被调用,否则itemIndexer将被设置为0.而不是它的数字大于数组1.如果它真的有必要我可以发布cellForRowAtIndexPath但是我不确定你是否需要它,如果它在第一次调用时工作.因此,总结对tableview的第一次调用是有效的,并且数据加载正常,但刷新会导致索引超出数组的边界,就像从不调用refresh:一样.
对于你说的,我只能猜测:
您的numberOfSectionsInTableView/numberOfRowsInSection返回错误的数字.
如果[self downloadData]是异步的(您正在发出服务器请求而不是等待响应),则应在获得数据后重新加载数据.
您下载的数据未与您已有的数据正确合并.
一些更多的代码(numberOfSectionsInTableView,numberOfRowsInSection,cellForRowAtIndexPath,downloadData)肯定会有所帮助.
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |