2011-08-29 3 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 [1,431 : B303] 2 개 인덱스 [0,0]

2011-08-29 19 : 26 : 21.274 XXXXXXXXXXXXX [1,431 : B303] - [__NSCFDictionary objectAtIndex는 :] : 26 : 미정 선택기 인스턴스 0x4ba2370

2011-08-29 19 보내 21.277 XXXXXXXXX : 앱 종료 * 의한 캐치되지 않는 예외 'NSInvalidArgumentException'이유로 [1,431 B303] '- [ __NSCFDictionary objectAtIndex :] : 인식 할 수없는 선택기가 인스턴스 0x4ba2370에 전송 됨 ' 예외가 발생하여 종료 됨

답변

1

코드가 NSArray 일 것으로 예상하는 algorithmSection 변수는 실제로는 NSDictionary이며 선택기 -objectAtIndex:에 응답하지 않습니다.

+0

, 정보의 동일한 전송을 유지하면서? –

+0

데이터를 저장하는 방법에 대해 자세히 알지 못하면 알려 드릴 수 없습니다. 아마도'-objectAtIndex :'에 대한 호출을'-objectForKey :'에 대치하여 셀의'textLabel'에 설정하고자하는 텍스트에 접근 할 수있는 적절한 키를 사용했을 것입니다. – lemnar

+0

oo .... 우수. 고맙습니다!! –

0

algorithmSections 사전의 키 "year"에있는 객체가 배열 대신 사전이 될 수 있습니까? 그게 여기서 일어나는 것처럼 보입니다.

1

lemnar와 mjisawai가 말했듯이 실제로 NSDictionary를 다루고 있습니다.

이 문제를 해결하는 방법은 앱 컨텍스트에 따라 다릅니다. NSArrays 또는 NSDictionary 개체 중 하나를받은 경우 개체 클래스에 문자 메시지를 보내이를 확인할 수 있습니다.

즉 내가 해결할 수있는 방법을 잘

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

좋아요, 사실은 plist의 값 중 일부를 변경해야했습니다. 도와 주셔서 감사합니다. –

+0

음, 물론 그렇습니다. 데이터 피드,이 경우에는 plist 또는이 데이터의 처리를 수정하는 것이 좋습니다. –