Это ошибка в 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." Вот ссылка!

Другие вопросы по тегам