2011-08-29 58 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在這種情況下,或者處理這些數據:) –