Как мне сохранить NSRange в NSMutableArray или другом контейнере? - PullRequest
56 голосов
/ 22 октября 2010

Вот что я хочу сделать:

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

С логическим значением я бы использовал такой код:

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

или с целым числом:

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

Так что же эквивалентно NSRange?Чего я не хочу делать, так это создать свой собственный подкласс NSObject для достижения этой цели.Наверняка есть способ с тем, что Apple уже предоставила?

Ответы [ 4 ]

135 голосов
/ 22 октября 2010

Используйте NSValue's +valueWithRange:. Чтобы получить структуру диапазона обратно, используйте свойство rangeValue.

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

NSRange r = a[4].rangeValue;
12 голосов
/ 22 октября 2010
[NSValue valueWithRange:r];

и получите обратно:

NSRange r = [rangeObject rangeValue];
5 голосов
/ 22 октября 2010

Если вам нужно сохранить NSRange в списке свойств, вы также можете превратить NSRange в NSString, используя функцию NSStringFromRange. И затем вы можете превратить эту строку обратно в диапазон, используя функцию NSRangeFromString.

4 голосов
/ 23 октября 2010

Еще одним вариантом может быть добавление этих диапазонов в NSIndexSet, в зависимости от того, как вы собираетесь их использовать в дальнейшем.

...