W mojej jednostce testowej patrzyłem na pewne warunki brzegowe i moje testy wciąż zawodziły. Śledziłem go z powrotem do wyliczenia poprzez zestaw indeksu, gdy jego indeksy rozciągają się aż do NSNotFound-1 (maksymalna prawna wartość na dokumentację).Czy jest to błąd w NSIndexSet enumerateIndexesUsingBlock?
Użycie tego kodu testu:
// 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);
W wyjściowych dziennika uzyskać:
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
Próbowałem to na moim Macu i na symulatorze iOS i uzyskać takie same wyniki (inne niż rzeczywiste wartości NSNotFound, w zależności od wersji 32-bitowej lub 64-bitowej).
To sprawiło, że pomyślałem, że może czytałem dokumentację źle. Czy robię coś złego, czy jest to błąd Apple?
To interesujące pytanie. +1 – trojanfoe
To naprawdę wygląda jak błąd w 'enumerateIndexesWithOptions'. –
Czy to działa, jeśli zaczniesz zakres w 'NSNotFound - 6' (i zachować długość 5)? –