2014-05-17 1 views
6

유닛 테스트에서 나는 경계 조건을보고 있었고 테스트는 실패했습니다. 색인이 NSNotFound-1 (문서 당 최대 합법적 가치)까지 확장 될 때 색인 세트를 통해 열거하는 것으로 다시 추적했습니다.NSIndexSet enumerateIndexesUsingBlock의 버그입니까?

이 테스트 코드 사용 :

Index set with 5 entries: <NSIndexSet: 0x10057f890>[number of indexes: 5 (in 1 ranges), indexes: (9223372036854775802-9223372036854775806)] 
NSNotFound is 9223372036854775807 and NSNotFound-1 is 9223372036854775806 
- 9223372036854775802 
- 9223372036854775803 
- 9223372036854775804 
- 9223372036854775805 
The count is 4 

내가 내 맥과 아이폰 OS 시뮬레이터에서이 작업을 시도합니다 (이외의 동일한 결과를 얻을 : 로그 출력에서 ​​

// Create an index set with NSNotFound-5, NSNotFound-4, NSNotFound-3, 
// NSNotFound-2 and NSNotFound-1 
NSIndexSet *testSet = [NSIndexSet indexSetWithIndexesInRange: 
    NSMakeRange(NSNotFound - 5, 5)]; 
NSLog(@"Index set with %lu entries: %@", (unsigned long) testSet.count, testSet); 
NSLog(@"NSNotFound is %lu and NSNotFound-1 is %lu", NSNotFound, NSNotFound - 1); 
__block int count = 0; 
[testSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { 
    NSLog(@"- %lu", (unsigned long) idx); 
    ++count; 
}]; 
NSLog(@"The count is %d", count); 

를 내가 얻을 32 비트 또는 64 비트에 따라 NSNotFound의 실제 값).

이렇게하면 설명서를 잘못 읽었을 가능성이 있습니다. 내가 잘못했거나 애플 버그인가?

+0

재미있는 질문입니다. +1 – trojanfoe

+0

사실 그것은'enumerateIndexesWithOptions'에서 버그처럼 보입니다. –

+0

'NSNotFound - 6'에서 범위를 시작하고 (길이 5를 유지하면) 작동합니까? –

답변

0

글쎄, 내가 버그라는 것을 확인해 주었다. 나는 버그 리포트를 작성하고 최신 OS X Yosemite Developer Preview와 Xcode Preview에서 수정되었다는 소식을 Apple로부터 들었습니다. 나는 그것을 다운로드하고 그것은 문서에서 예상대로 작동하는 것 같았다.

한 줄의 코드를 변경해야한다고 생각하여 현재 또는 이전 버전의 Xcode에 패치를 적용할지 묻는 메시지가 표시되지 않았지만 숨이 멈췄습니다.

0

이것은 버그가 아닙니다. 설정 한 값은 가치가 있습니다. "NSIndexSet 클래스는 사용 방법으로 인해 인덱스라고하는 고유 한 부호없는 정수의 불변 인 컬렉션을 나타냅니다.이 컬렉션은 인덱스 집합이라고하며 인덱스는 0 .. NSNotFound - 1이어야합니다. 여기에 link이 있습니다!

+0

설명서를 읽었으며 색인은 다음과 같습니다. NSNotFound-5, NSNotFound-4, NSNotFound-3, NSNotFound-2 및 NSNotFound-1 모두> 0이고 <= NSNotFound-1입니다. NSIndexSet은 NSLog() 출력에 표시된 것처럼 올바르게 작성되지만 열거 형은 마지막 색인으로 만들지 않습니다. 내가 [NSIndexSet indexSetWithIndexesInRange : NSMakeRange (NSNotFound - 5, 6)]를 실행하면 *** - [NSIndexSet initWithIndexesInRange :] : Range {9223372036854775802, 6}가 NSNotFound - 1의 최대 색인 값을 초과합니다. 나는 최대 값을 초과하지 않는다, 나는 열거 방법이 깨 졌음을 확신한다. – LavaSlider

+0

죄송합니다. 처음에 무슨 뜻인지 오해했습니다. 그 코드를 테스트했는데 경계 값에 관한 것이라고 생각합니다. 버그입니다. – user2523232