我的程序有一些奇怪的问题!!我创建了一个嵌套的可变数组,它由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
更新:我找到了一种更简单的方法来解决我的问题,所以不需要更进一步,但感谢任何人对此事有所了解
问候
答案 0 :(得分:0)
您是否知道在c和(大多数其他编程语言)中,数组的索引是从0
到count-1
?因此,您的数组索引应该从0
到3
,而不是从1
到4
。