Это ошибка в NSIndexSet enumerateIndexesUsingBlock?
В моем модульном тестировании я смотрел на некоторые граничные условия, и мои тесты продолжали терпеть неудачу. Я проследил это до перечисления через набор индексов, когда его индексы расширяются вплоть до NSNotFound-1 (максимальное допустимое значение в документации).
Используя этот тестовый код:
// 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 );
В выводе журнала я получаю:
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
Я попробовал это на своем Mac и на симуляторе iOS и получил те же результаты (кроме фактических значений NSNotFound, в зависимости от 32-битной или 64-битной).
Это заставило меня подумать, что, возможно, я неправильно прочитал документацию. Я что-то не так делаю или это ошибка Apple?
2 ответа
Ну, похоже, у меня есть подтверждение, что это / было ошибкой. Я добавил отчет об ошибке и узнал от Apple, что он исправлен в последних версиях OS X Yosemite Developer Preview и Xcode Preview. Я скачал его, и он, кажется, работает, как и ожидалось из документации.
Я подозреваю, что они должны были изменить одну строку кода, поэтому спросил, будут ли они исправлять текущую или предыдущие версии Xcode, но я не слышал и не затаил дыхание.
Это не ошибка. Заданное вами значение выходит за допустимые значения. "Класс NSIndexSet представляет собой неизменную коллекцию уникальных целых чисел без знака, называемых индексами из-за способа их использования. Эта коллекция называется набором индексов. Индексы должны находиться в диапазоне 0 .. NSNotFound - 1." Вот ссылка!