2011-08-29 59 views
0
NSString* year = [self.years objectAtIndex:[indexPath section]]; 

//get algorithms for that year 
NSArray* algorithmSection = [self.algorithmNames objectForKey:year]; 

NSLog(@"%@", indexPath); 

//get specific algorithm based on that row 
cell.textLabel.text = [algorithmSection objectAtIndex:indexPath.row]; 

return cell; 

无论什么原因,当我编译这个时,我得到一个SIGABRT错误。它发生在NSArray SIGABRT

cell.textLabel.text 

行。错误:

2011-08-29 19:26:21.273 XXXXXXXXXXX [1431:B303] 2个索引[0,0]

2011-08-29 19:26:21.274 XXXXXXXXXXXXX [1431:B303] - [__NSCFDictionary objectAtIndex:]:无法识别的选择发送到实例0x4ba2370

2011-08-29 19:26:21.277 XXXXXXXXX [1431:B303] *终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因:“ - [ __NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例0x4ba2370' 终止调用抛出异常

回答

1

您的algorithmSection变量,您的代码预计为NSArray,实际上是NSDictionary,它不响应选择器-objectAtIndex:

+0

嗯,我怎么能解决这个问题,同时保持相同的信息传递? –

+0

如果您不知道如何存储数据,我无法告诉您。据推测,你可以使用适当的键替换对'-objectAtIndex:'调用'-objectForKey:'的调用,以访问要在单元格的textLabel上设置的文本。 – lemnar

+0

oo ....优秀。谢谢!! –

0

算法部分字典中键“年”的对象可以是字典而不是数组吗?这就是这里发生的情况。

1

正如lemnar和mjisawai所说,你实际上正在处理一个NSDictionary。

解决此问题的方法取决于您的应用程序的上下文。 如果你碰巧收到NSArrays或NSDictionary对象,那么你可以通过发送对象的类来确定。

if ([algorithmSection isKindOfClass:[NSArray class]]) { 
    ... 
} else if ([algorithmSection isKindOfClass:[NSDictionary class]]) { 
    ... 
} 
+0

好吧,我其实只需要改变plist中的一些值。感谢您的帮助。 –

+0

嗯,当然是。您可以选择修改数据馈送,您的plist在这种情况下,或者处理这些数据:) –