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];
}