2011-05-19 60 views
1

我知道使用arrayForRowAtIndexPath使用indexPath和row的基本思想,但我不确定通过二维数组的最佳方式。我创建了一个自定义单元格,可以将7个不同的字符串接受到7个持有者中,并且我创建了一个包含3行7个字符串的2D数组。 (3x7二维阵列)。有关如何设置cellForRowAtIndexPath自动通过此数组的任何建议?Objective C在cellForRowAtIndexPath中使用2D阵列

让我进入更多细节。我的多维数组是包含7个字符串的数组的数组:(“土豆”,“0”,“1”,“2”,“3”,“4”,“5”)我的自定义单元格全部设置有7个子视图(他们工作,我测试了一个数组)。在我所创建的自定义单元格的同一个班级,我已经创建了一个从测试阵列值分配给这些子视图的方法:

- (void)setMyArray:(NSArray *)myArray 
{ 
    NSString *name = [myArray objectAtIndex:0]; 
    [nameLabel setText:name]; 
    [name release]; 
    NSString *numberA = [myArray objectAtIndex:1]; 
    [aLabel setText:numberA]; 
    [numberA release]; 
    NSString *numberB = [myArray objectAtIndex:2]; 
    [bLabel setText:numberB]; 
    [numberB release]; 
    NSString *numberC = [myArray objectAtIndex:3]; 
    [cLabel setText:numberC]; 
    [numberC release]; 
    NSString *numberD = [myArray objectAtIndex:4]; 
    [dLabel setText:numberD]; 
    [numberD release]; 
    NSString *numberE = [myArray objectAtIndex:5]; 
    [eLabel setText:numberE]; 
    [numberE release]; 
    NSString *numberF = [myArray objectAtIndex:6]; 
    [fLabel setText:numberF]; 
    [numberF release]; 
} 

在的viewController,我不得不称之为是:

[cell setMyArray:testList]; 

它的工作原理。我只是不确定如何用2D数组来做到这一点。

+0

这将取决于你如何配置你的2D阵列。 – 2011-05-19 03:27:04

+2

以上将最终崩溃。你过度释放数组中的每个元素。调用'-objectAtIndex:'不是一个alloc,copy或retain,所以你不应该在结果上调用'release'。 – 2011-05-20 01:39:56

回答

0

我不知道到底是你的自定义单元格的代码是什么样子,但你不只是做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"]; 
    if (cell == nil) { 
     //... 
    } 

    [cell setMyArray:[self.myTwoDArray objectAtIndex:indexPath.row]]; 

    // and so on... 

而且,Rob的关于你的内存管理权。在您将它们从原始数组中取出时不要释放这些对象。

+0

感谢Rob提供的内存管理技巧。是的,你是对的乔希,你的代码很好。我想出了一些NSLogs,我的setMyArray工作得很好,不需要第二个objectAtIndex。它每次都收到一个数组。再次感谢你们。 – Plaidfox 2011-05-20 22:23:32

+0

另一个'NSArray'仍然是一个'NSArray',所以这就是当你要求'objectAtIndex'时得到的结果:'很高兴能帮上忙! – 2011-05-20 22:24:54