2010-10-22 23 views
52

Dưới đây là những gì tôi muốn làm:Làm cách nào để lưu trữ NSRange trong NSMutableArray hoặc vùng chứa khác?

NSRange r = NSMakeRange(0,5); 
id a = [NSMutableArray a]; 
[a addObject: r]; // but NSRange is not a NSObject * 

Với một boolean, tôi muốn sử dụng mã như thế này:

[a addObject: [NSNumber numberWithBool: YES]]; 

hoặc với một số nguyên:

[a addObject: [NSNumber numberWithInteger: 3]]; 

Vậy là những gì tương đương với một số NSRange? Những gì tôi không thực sự muốn làm là tạo lớp con của riêng tôi là NSObject để thực hiện việc này. Chắc chắn có một cách với những gì Apple đã cung cấp?

Trả lời

130

Use NSValue's +valueWithRange:. Để truy xuất cấu trúc dải ô, hãy sử dụng property rangeValue.

[a addObject:[NSValue valueWithRange:r]]; 
... 

NSRange r = a[4].rangeValue; 
+2

Tại sao NSValue có thể lưu trữ NSRange nhưng NSArray có thể không? – antonio081014

+3

Vì 'NSArray' chỉ có thể lưu trữ các đối tượng. 'NSRange' không phải là một đối tượng, nhưng bạn có thể bọc nó với' NSValue' để nó có thể được sử dụng bởi 'NSArray',' NSDictionary', v.v. –

+0

trong khi lặp qua mảng NSMutable, NSRange r = a [i] .rangeValue như giá trị phạm vi thuộc tính không tìm thấy trên id loại ... –

11
[NSValue valueWithRange:r]; 

và làm cho nó trở ra với:

NSRange r = [rangeObject rangeValue]; 
+0

phạm vi là gì? –

5

Nếu bạn cần lưu trữ các NSRange trong một danh sách bất động sản, bạn cũng có thể biến một NSRange thành một NSString sử dụng NSStringFromRange chức năng. Và sau đó, bạn có thể biến chuỗi đó trở lại phạm vi bằng cách sử dụng hàm NSRangeFromString.

+1

Thăng hạng vì điều này thông minh và hữu ích, nhưng NSValue có vẻ ít bị khuỷu tay hơn. Cảm ơn. :) –

+0

Cảm ơn! Tôi chỉ biết về bản thân NSValue' từ những câu trả lời khác (cảm ơn @mipadi và @KennyTM), và nó chắc chắn kém cỏi hơn đề nghị của tôi. Để được xứng đáng hơn của upvote loại của bạn, tôi cập nhật câu trả lời của tôi để đề cập đến rằng phiên bản chuỗi có thể hữu ích với việc lưu trữ phạm vi trong danh sách tài sản. –

4

Một tùy chọn khác có thể là thêm các dải đó vào một NSIndexSet, tùy thuộc vào cách bạn định sử dụng chúng tiếp theo.

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