2012-01-14 187 views
0

所以我一直在尝试从UITableView加载单元格,并将它们放入NSMutableArray中,以便稍后迭代。我有一个名为populateArrayWithCells的方法,它可以正常工作,直到我放入6个以上的单元格。出于某种原因,返回的对象是零。我的代码是下面,StocksAndAccounts是UITableView的,我已经在子类部分中的UITableViewCells 1.循环遍历UITableView的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为调用时,则返回该细胞successfuly直到索引是6,在这种情况下,它是零和崩溃,因为它试图添加一个零的对象。任何有关这个问题的帮助将不胜感激。

+0

你为什么要这么做。 – bryanmac 2012-01-14 02:20:20

+0

Uitableview具有数据的委托回调模式,并且存在单元重用队列 – bryanmac 2012-01-14 02:21:05

+0

同意 - 为什么要这样做?这闻起来像一个设计缺陷。 – 2012-01-14 02:22:36

回答

1

我想你已经误解了UITableView的工作原理。 tableview中的单元格只在需要显示时加载,并且它们被回收,所以如果一次只能在屏幕上看到六个单元格,那么该表格将只包含六个单元格,并且它将不断更新和重用那些相同的六个上下滚动。

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

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

+0

你可以给我提供代码如何将数据存储在自定义对象数组中,并将其用于cellforrowatindexpath。 – 2014-07-30 10:24:03

1

你正在倒退。

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