2010-07-25 6 views
0

나는 아이폰 OS 4와 흥미로운 새로운 오류를 받고 있어요 :새로운있는 NSString substringWithRange : 오류 메시지

-[NSCFString substringWithRange:]: Invalid range {11, 4294967295}; this will become an exception for apps linked on SnowLeopard. Warning shown once per app execution.

오류가 나는 제목 사례 문자열을하는 데 도움이되는 블로그 게시물에서 가져온 코드 조각에 의해 발생, 고치기가 어렵지는 않을 것입니다. 그러나 다른 곳에서는 언급되지 않은 것을 보았습니다. 그리고 저는 Apple이 사람들에게 마법의 사용을 중단하길 원합니다. 4294967295 넘버.

누구든지이 변경의 기록/배경을 알고 있습니까?

EDIT : 제목 케이스 코드의 출처는 http://vengefulcow.com/titlecase/입니다. 객관적인 -C 포트입니다 (분명히). 116 번 라인은 가해자입니다. 분명히 그것은 특정 조건에서만 문제입니다. 나는 아직도 그것을 추적하고있다.

+1

코드를 게시 할 수 있습니까? –

+1

음, 4294967295는 마법의 숫자입니다. 32 비트로 얻을 수있는 가장 높은 숫자이며, Snow Leopards 64 이후로는 그렇지 않습니다. 아마도 아이폰이 32 비트이기 때문에 그것들을 주목할 것입니다. –

+0

범위가 넓어지면 4294967295를 지나갈 것입니다. 그러면 아이폰에서 그 일을 할 수 없다는 예외가 생깁니다. –

답변

1

부호없는 4294967295는 -1에 대해 서명 된 uint32_t 값과 같습니다. 나는 32 비트 애플 리케이션이 보관 된 -1 및 64 비트 애플 리케이션이 큰 엉덩이 길이로 끔찍한 재미를 보았던 문제를 보았습니다. (Xcode가 64 비트를 가져 오는 동안 malloc(4294967295)을 호출 할 때 재미있었습니다.)

코코아 프레임 워크는 길이가 문자열 자체보다 긴 범위를 통과 한 것을 감지하고 있습니다. 결과가 잘리지 않아도 경고가 표시되지만 나중에 오류가 발생합니다.

(일부 경우 NSNotFound로 인해 이러한 종류의 문제가 발생할 수 있음)

+0

예, 이것이 문제 였고 애플의 변화에 ​​대한 동기를 설명한다. 고맙습니다. – Steve