循环通过UITableView的UITableViewCells

时间:2012-01-14 02:17:05

标签: iphone objective-c ios uitableview

所以我一直在尝试从UITableView加载单元格并将它们放入NSMutableArray中以便稍后迭代。我有一个名为populateArrayWithCells的方法,它工作正常,直到我输入超过6个单元格。由于某种原因,返回的对象是零。我的代码如下,StocksAndAccounts是UITableView,我在第1部分中已经将UITableViewCells子类化了。

- (void) populateArrayWithCells
{
for (int i = 0; i < [StocksAndAccounts numberOfRowsInSection:1]; i++) {
    if ([StocksAndAccounts cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]] == nil) {
        NSLog(@"object at index %i is nil", i);
    }
    [stocksCells addObject:[StocksAndAccounts cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]]];
}
}

当通过IBAction调用此函数时,成功返回单元格,直到索引为6,在这种情况下,它是nil并崩溃,因为它试图添加一个nil的对象。任何有关此问题的帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为你误解了UITableViews是如何工作的。 tableview中的单元格仅在需要显示时加载,并且它们被循环使用,因此如果您一次只能在屏幕上看到六个单元格,那么该表格将只包含六个单元格,它将继续更新和重用你向上和向下滚动的那六个。

不是将数据存储在表格单元格中,而是将其存储在视图控制器中的自定义对象数组中,并在表格从数据源方法请求时填充单元格。

这样,如果您需要将该数据用于表格中显示以外的其他内容,您可以从原始对象重新创建它,而不是尝试将其复制出表格单元格。

答案 1 :(得分:1)

你正在倒退。

你的NSMutableArray(最好比那更坚固的模型)应该保留你想要在UITableView中显示的内容,而不是相反。请查看Model-View-Controller设计模式。