2015-01-10 4 views
0

8.1 시뮬레이터에서 실행할 때 문자열의 길이를 비교하여 응용 프로그램이 충돌한다는 iPad 응용 프로그램 (XCode 6.1.1, iOS 8.1, ARC)이 있습니다. 이것은 1 년 넘게 실행되어 어제 중지되었습니다.NSString.length가 충돌을 일으킴 (NSInvalidArgumentException)

@synthesize shopOpenHour; 
@synthesize shopCloseHour; 

과 :

if(shopOpenHour.length == 0 || shopCloseHour.length == 0) { 
이가하는 .m 파일의 코드가

@property NSString *shopOpenHour; 
@property NSString *shopCloseHour; 

입니다 : 이것은 .H 파일의 코드가

입니다 :이 코드입니다

그리고 이로 인해 충돌이 발생합니다.

이내가지고있어 오류입니다 :

인해 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유는

*** : - :

'[__ NSCFNumber 길이] 알 수없는 선택 예를 0xb000000000003203로 전송'

iOS 8.1을 실행하는 7.1 시뮬레이터 및 iPad에서 실행하면 정상적으로 실행됩니다. 나는 NSCFNumber가 "그림 속에"있는 곳/이유를 이해하지 못합니다.

내 질문은 : (나는 레이더를 제출하기 전에?)이 원인을 무엇의 어떤 아이디어

+2

이런 소리는 재연 될 수 있습니다. NSString이 아니라면 스택 추적/중단 점을 덤프하는 인수의 유형을 확인하는 자체 setter를 정의하지 않는 이유는 무엇입니까? – CRD

+0

'shopCloseHour'라는 또 다른 필드를 정의했을 수도 있습니다? 'shopCloseHour'를'if'와'NSLog' 문에서'_shopCloseHour'로 바꾸고 다시 시도하십시오. –

답변

1

어딘가에 당신이 shopCloseHour에의 NSNumber를 할당,

if ([shopCloseHour isKindOfClass:[NSString class]]) { 
    // this is a string … 
} 
JSON .Check에서 값을 할당 할 때 일어날 수 있습니다
+0

분명히 NSUserDefaults에서 저장하거나 검색 할 때 변경됩니다. 고마워요 ... 오늘 나에게 많은 것을 줄 것입니다! : D – SpokaneDude

+1

문제의 원인을 수정하는 것이 좋습니다. 이 대답에서'if' 문을 사용하면 디버깅에 도움이되지만 코드가 남아 있어서는 안됩니다. – rmaddy

+0

이를 방지하려면 objectForKey를 사용하는 대신 NSUserDefaults의 유형별 메서드를 사용해야합니다. –