web-dev-qa-db-fra.com

Comment stocker une NSRange dans un NSMutableArray ou un autre conteneur?

Voici ce que je veux faire:

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

Avec un booléen, j'utiliserais du code comme ceci:

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

ou avec un entier:

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

Alors, quel est l'équivalent avec un NSRange? Ce que je ne veux pas vraiment faire, c'est créer ma propre sous-classe de NSObject pour y parvenir. Il y a sûrement un moyen avec ce qu'Apple a déjà fourni?

58
Steven Fisher

tilisez +valueWithRange: De NSValue . Pour récupérer la structure de la plage, utilisez la propriété rangeValue .

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

NSRange r = a[4].rangeValue;
136
kennytm
[NSValue valueWithRange:r];

et sortez-le avec:

NSRange r = [rangeObject rangeValue];
12
mipadi

Si vous devez stocker le NSRange dans une liste de propriétés, vous pouvez également transformer un NSRange en NSString à l'aide de la fonction NSStringFromRange. Et puis, vous pouvez reconvertir cette chaîne en une plage à l'aide de la fonction NSRangeFromString.

5
James Huddleston

Une autre option pourrait être d'ajouter ces plages dans un NSIndexSet, selon la façon dont vous comptez les utiliser ensuite.

4
Mike Abdullah