NSRangeException - NSArrayM objectAtIndex



EDIT - SOLVED:问题是当我创建字符串与所有的对象放入tableview。我用了'?'将每个对象和其中一个包含该字符的对象分开,因此数组中断。[myString appendFormat:@"%@$%@$%@$%@?",
[currentCampeggioDict valueForKey:@"id"],
[currentCampeggioDict valueForKey:@"nome"],
[...]

NS Array *elencoCampeggi=[myString componentsSeparatedByString:@"?"];

That's it.


I have this problem: my app receives from an URL a XML file with a list of objects. The tableview由这些对象填充。有这么多项目,所以我不得不多次调用url,改变其中的一个参数,例如:

http://www.myurl.com?method=xxx&PAGE=1

http://www.myurl.com?method=xxx&PAGE=2

等。

tableview的最后一个单元格包含句子"点击加载下一个25个对象",它改变了URL的页码,删除自己并重新加载URL,将新对象添加到表视图中。

4次之后一切都很好,但是当我按第五次单元格时,出现了以下文本的异常:

Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArrayM objectAtIndex:]: index 17 beyond bounds [0 .. 16]'

帮忙吗?谢谢。

编辑:一些代码:这是我删除最后一个单元格的部分

-(void) loadTestData { // fill moviesArray with test data

NSInteger lastRow = [CampeggiArray count]-1;
if (lastLoadedPage > 1){
    [CampeggiArray removeObjectAtIndex:lastRow];
    [self.tableView reloadData];
}
 

[…]

问题是因为你在tableview委托方法中返回了错误的行数。你需要确定在tableview中列出的对象总数并在tableview委托方法中返回这个计数。这不是你的页面大小。

对于每次命中,您需要继续将新对象添加到已经存在的数据源(NSArray)并重新加载表。在初始命中期间,数据源中将没有对象。

你在委托方法中返回16而不是15,所以你会异常崩溃。不要在委托方法中硬编码值,只需获取对象的总数(整个集合)并返回其计数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section                {
   return [totalObjects count];

}

相关内容

最新更新