Reputation: 44876
Here's what I want to do:
NSRange r = NSMakeRange(0,5);
id a = [NSMutableArray a];
[a addObject: r]; // but NSRange is not a NSObject *
With a boolean, I'd use code like this:
[a addObject: [NSNumber numberWithBool: YES]];
or with an integer:
[a addObject: [NSNumber numberWithInteger: 3]];
So what's the equivalent with a NSRange
? What I don't really want to do is create my own subclass of NSObject
to accomplish this. Surely there's a way with what Apple's already provided?
Upvotes: 59
Views: 19643
Reputation: 523314
Use NSValue's +valueWithRange:
. To retrieve the range structure back, use the property rangeValue
.
[a addObject:[NSValue valueWithRange:r]];
...
NSRange r = a[4].rangeValue;
Upvotes: 143
Reputation: 15003
One other option might be to add those ranges into an NSIndexSet
, depending on how you intend to use them next.
Upvotes: 4
Reputation: 8448
If you need to store the NSRange
in a property list, you can also turn an NSRange
into an NSString
using the NSStringFromRange
function. And then, you can turn that string back into a range using the NSRangeFromString
function.
Upvotes: 5
Reputation: 410682
[NSValue valueWithRange:r];
and get it back out with:
NSRange r = [rangeObject rangeValue];
Upvotes: 13