2012-10-15 6 views
0

잠시 동안 사이트를 살펴본 결과 몇 가지를 보았지만 나에게 도움이되지 않았습니다. 여기 극단적 인 초보자.NSInvalidArgumentException, nil 인수

plist에서 채워진 사전에서 채워진 배열로 채워진 2 구성 요소 선택 도구를 만들려고합니다. 구성 요소가 채워지고 하나의 구성 요소를 회전시키는 버튼이 있습니다. 두 번째 버튼은 응답을 확인하기위한 것이고 (첫 번째 구성 요소에는 두 번째 구성 요소의 대문자와 일치 시키려고 시도하는 상태가 있음), 이는 항상 충돌하는 부분입니다.

- '전무 인수 [: 로케일 : 인수 : NSPlaceholderString initWithFormat :] *'

응용 프로그램을 종료

* 인해 캐치되지 않는 예외 'NSInvalidArgumentException', 이유를 다음과 같이

내가 오류입니다

* 먼저 던져 호출 스택 : (0x14b3022 0xeb3cd6 0x145ba48 0x145b9b9 0x916169 0x916ab4 0x3036 0x14b4e99 0x1914e 0x190e6 0xbfade 0xbffa7 0xbf266 0x3e3c0 0x3e5e6 0x24dc4 0x18634 0x139def5 0x1487195 0x13ebff2 0x13ea8da 0x13e9d84 0x13e9c9b 0x139c 7D8 0x139c88a 0x16626 0x27ad 0x2715) 내가 잘못거야 어디 모르겠어요 예외 (lldb)

을 던지는라고 종료합니다. 하드 코딩 된 배열을 사용하여이 작업을 수행했습니다. 버튼의 코드는 다음과 같습니다 (스위치 코드를 무시하십시오. 아직 그 작업을 수행하는 방법을 알지 못했습니다. 화면이 녹색으로 바뀌고 올바른 답변이 표시되고 빨간색이 올바르지 않게하려면) 앱이 충돌하는 경우) :

- (IBAction) checkAnswer; { NSInteger StateRow = [pickerCapital selectedRowInComponent : karrayStateComponent]; NSInteger CapitalRow = [pickerCapital selectedRowInComponent : karrayCapitalComponent];

NSString *state = [arrayState objectAtIndex:StateRow]; 
NSString *capital = [arrayCapital objectAtIndex:CapitalRow]; 

NSLog (@"%i",[pickerCapital selectedRowInComponent:karrayCapitalComponent]); 
NSLog(@"%i", [pickerCapital selectedRowInComponent:karrayStateComponent]); 

NSString *Title = [[NSString alloc]initWithFormat:@"You have selected %@ as the capital of %@.", capital, state]; 
NSString *Message =[[NSString alloc]initWithFormat:lblMsg]; 

UIAlertView *alert =[[UIAlertView alloc]initWithTitle:Title message:Message delegate:@"" cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alert show]; 

if (StateRow == CapitalRow) { 
    lblMsg = @"You are correct!"; 
    UIColor *myColor; 
    switch ([not sure what to use here]) { 
     case 0: 
     myColor = [UIColor greenColor]; 
      break; 
     default: 
      break; 
    } 
} 
else { 
    lblMsg = @"Incorrect"; 
    UIColor *myColor; 
    switch ([not sure what to use here]) { 
     case 0: 
     myColor = [UIColor redColor]; 
      break;   
     default: 
      break; 
    } 
} 

}

사람이에 도움의 어떤 종류를 제공 할 수있는 경우에, 나는 크게 감사하겠습니다! 고맙습니다!

+0

예외가 발생하는 곳을 볼 수 있도록 예외 중단 점을 설정해야합니다. 이 질문에 대한 답변을보십시오 : http://stackoverflow.com/questions/4961770/run-stop-on-objective-c-exception-in-xcode-4 –

+0

아, 그래! NSString * Message, 특히 lblMsg에서 예외가 발생했습니다. "서식 문자열이 문자열 리터럴 (잠재적으로 안전하지 않음)"이 아닙니다. 내 다른 버튼에 같은 ​​노란색 오류가 있었지만 결코 예외를 형성하지는 못했습니다. – user1678809

답변

0

두 가지 확인 사항 :

  • 이 lblMsg 선언하거나 값을 할당하는 경우?
  • 대문자 및 상태가 [arrayCapital objectAtIndex]의 호출에서 nil이 아닌 것은 확실합니까?

구체적으로 : the NSString documentation 상태 : "중요 : 형식이 nil 인 경우 NSInvalidArgumentException 발생." initWithFormat에 대한.

+0

나는 lblMsg를 NSString으로 선언 했으므로 if 문에서 해당 값을 가져옵니다. 내가 말했던 것처럼 그들이 하드 코딩되지 않은 배열로 잘 동작했다는 것을 나는 믿지 않는다.viewDidUnload에서 배열을 릴리즈 할 때 일어나는 일입니까? – user1678809

관련 문제