我的UITableView的第一个项目不起作用

时间:2011-11-13 01:50:34

标签: ios uitableview nsmutablearray

我的程序有一些奇怪的问题!!我创建了一个嵌套的可变数组,它由4个可变数组组成,每个数组包含一个字符串和另外4个数组,每个数组都包含两个字符串。这是我通过NSLog传递数组时收到的日志:

然后我使用3个tableview控制器以某种方式创建一个    通过这些数组导航,与第一个tableview一样    控制器,我根据哪个项加载第二个    选择原始数组,依此类推。

除了第一个顶部之外,一切都适用于所有阵列    第一级(包含

的第一个数组)

我使用objectAtIndex并拥有tempProjectNumber,它保存用于选择项目的第一个tableview控制器的选定index.row。但是,当我的第二个tableviewcontroller加载cell.textlabel.text时,我收到一个sigbart错误:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:' - [__ NSArrayI isEqualToString:]:   无法识别的选择器发送到实例0x8987c80'

我设法找到我在加载cell.textlabel文本时尝试访问的项目的类,它说它是> __ NSCFConstantString。

这是完整的日志:

>2011-11-13 01:36:42.031 iCodeMobile[4763:15203] indexpath.row: 1 projectnumber:0 
>2011-11-13 01:36:42.032 iCodeMobile[4763:15203] array: __NSCFConstantString 
>2011-11-13 01:36:42.033 iCodeMobile[4763:15203] indexpath.row: 2 projectnumber:0 
>2011-11-13 01:36:42.033 iCodeMobile[4763:15203] array: __NSCFConstantString   
>2011-11-13 01:36:42.034 iCodeMobile[4763:15203] indexpath.row: 3 projectnumber:0 
>2011-11-13 01:36:42.035 iCodeMobile[4763:15203] array: __NSCFConstantString 
>2011-11-13 01:36:42.036 iCodeMobile[4763:15203] indexpath.row: 4 projectnumber:0 
>2011-11-13 01:36:42.036 iCodeMobile[4763:15203] array: __NSArrayI>

索引path.row记录是第二个视图控制器的表行,项目编号是第二个最高级别的数组,第一个项目是testproject1。并且数组记录是我正在尝试访问的项目的类。你可以看到最后一个是NSArrayI,但是我没有使用类似的东西,你可以从我之前的数组映射中看到。

有趣的是,如果我使用调试模式并逐步进入每一行,在所有单元格行加载了正确的文本后,我会收到此错误:

  

[CALayer objectAtIndex:]:无法识别的选择器发送到实例0x7f51f40   我没有使用任何图层,我甚至不知道该做什么!!!

请帮忙,因为我处理这个问题差不多一个月了。我正在使用uipickerview,同样的事情发生了,同样的第一项问题和相同的SIGBART错误!!!

感谢。

更新@Mundi:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
   {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault    reuseIdentifier:CellIdentifier] autorelease];
    }
    if (indexPath.row==0)
    {
        cell.textLabel.text = @"Please Select A folder";
    }else
    {
        NSLog(@"indexpath.row: %u projectnumber:%u",indexPath.row,shared.tempProjectNumber);
        id object = [[shared.fileNameContainer objectAtIndex:shared.tempProjectNumber]    objectAtIndex:indexPath.row];
        if ([object isKindOfClass:[NSString class]]){
            NSLog(@"String: %@",[[[shared.fileNameContainer    objectAtIndex:shared.tempProjectNumber] objectAtIndex:indexPath.row]objectAtIndex:0]);
        }
        else
        {

            NSLog(@"array: %@",[[[[shared.fileNameContainer objectAtIndex:shared.tempProjectNumber] objectAtIndex:indexPath.row]objectAtIndex:0]class]);
        }

    cell.textLabel.text = [[[shared.fileNameContainer objectAtIndex:shared.tempProjectNumber] objectAtIndex:indexPath.row]objectAtIndex:0];

    };

    return cell;
}

在这里,shared.tempProjectNumber是项目数组的记录索引(我的主数组中最高级别的数组,即shared.fileNameContainer)。这是我之前为该帖子录制的录音,并且在表格的所有项目都已加载后,我认为它是导致问题的最后一项,我收到了sigbart错误!非常感谢Mundi

更新:我找到了一种更简单的方法来解决我的问题,所以不需要更进一步,但感谢任何人对此事有所了解

问候

1 个答案:

答案 0 :(得分:0)

您是否知道在c和(大多数其他编程语言)中,数组的索引是从0count-1?因此,您的数组索引应该从03,而不是从14