2014-05-17 19 views
6

Trong thử nghiệm đơn vị của tôi, tôi đã xem xét một số điều kiện biên và các thử nghiệm của tôi vẫn không thành công. Tôi theo dõi nó trở lại để liệt kê thông qua một bộ chỉ số khi các chỉ mục của nó mở rộng tất cả các cách để NSNotFound-1 (giá trị pháp lý tối đa cho mỗi tài liệu).Đây có phải là lỗi trong NSIndexSet enumerateIndexesUsingBlock không?

Sử dụng mã kiểm tra này:

// 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); 

Trong dữ liệu ghi nhận tôi nhận được:

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 

Tôi cố gắng này trên máy Mac của tôi và trên giả lập iOS và nhận được kết quả tương tự (trừ các giá trị thực tế của NSNotFound, tùy thuộc vào 32 bit hoặc 64 bit).

Điều này khiến tôi nghĩ rằng có lẽ tôi đã đọc tài liệu sai. Tôi có làm điều gì sai hay đây là lỗi của Apple không?

+0

Đó là một câu hỏi thú vị. +1 – trojanfoe

+0

Điều đó thực sự trông giống như một lỗi trong 'enumerateIndexesWithOptions'. –

+0

Tính năng này có hoạt động nếu bạn bắt đầu phạm vi tại 'NSNotFound - 6' (và giữ độ dài 5) không? –

Trả lời

0

Có vẻ như tôi đã xác nhận rằng đó là/là một lỗi. Tôi đưa vào một báo cáo lỗi và nghe từ Apple rằng nó được cố định trong bản xem trước nhà phát triển OS X Yosemite và Xcode Preview mới nhất. Tôi đã tải xuống và dường như nó hoạt động như mong đợi từ tài liệu.

Tôi nghi ngờ họ phải thay đổi một dòng mã để hỏi xem họ có vá các phiên bản Xcode hiện tại hoặc trước đó hay không nhưng tôi không nghe và tôi không nín thở.

0

Nó không phải là lỗi. Giá trị bạn đã đặt nằm ngoài giá trị được xác thực. "Lớp NSIndexSet đại diện cho một tập hợp bất biến của các số nguyên không dấu duy nhất, được gọi là các chỉ mục vì cách chúng được sử dụng. Bộ sưu tập này được gọi là một bộ chỉ mục. Các chỉ mục phải nằm trong phạm vi 0 .. NSNotFound - 1." Đây là link!

+0

Tôi đã đọc tài liệu và các chỉ mục của tôi là: NSNotFound-5, NSNotFound-4, NSNotFound-3, NSNotFound-2 và NSNotFound-1, tất cả đều là> 0 và <= NSNotFound-1. NSIndexSet được tạo chính xác, như được hiển thị bởi đầu ra NSLog(), nhưng kiểu liệt kê không làm cho nó trở thành chỉ mục cuối cùng. Nếu tôi làm '[NSIndexSet indexSetWithIndexesInRange: NSMakeRange (NSNotFound - 5, 6)]' nó tạo ra lỗi '*** - [NSIndexSet initWithIndexesInRange:]: Range {9223372036854775802, 6} vượt quá giá trị chỉ số tối đa của NSNotFound - 1'. Tôi không vượt quá giá trị tối đa, tôi khá chắc chắn rằng các phương pháp liệt kê đã bị hỏng. – LavaSlider

+0

Xin lỗi, tôi đã hiểu lầm ý bạn lúc đầu. Tôi đã thử nghiệm mã đó, tôi nghĩ đó là về giá trị biên, Đó là một lỗi. – user2523232

Các vấn đề liên quan