在我的单元测试中,我正在查看一些边界条件,我的测试仍然失败。当它的索引一直延伸到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漏洞?
答案 0 :(得分:0)
这不是一个错误。您设置的值超出了有价值的值。 &#34; NSIndexSet类表示唯一无符号整数的不可变集合,由于它们的使用方式而被称为索引。此集合称为索引集。索引必须在0 .. NSNotFound - 1范围内。&#34;这是link!
答案 1 :(得分:0)
看起来我确认它是/是一个错误。我提交了一个错误报告,并从Apple那里听说它已在最新的OS X Yosemite Developer Preview和Xcode Preview中得到修复。我下载了它,它似乎按照文档中的预期工作。
我怀疑他们不得不改变一行代码,所以问他们是否会修补当前或以前版本的Xcode,但我没有听到,我也没有屏住呼吸。