2010-04-16 7 views
1

Y at-il un moyen de multiplier chaque NSNumber contenu dans le tableau par 10? Voici ce que j'ai jusqu'à présent:NSArray multiplier chaque argument

NSMutableArray *vertex = [NSMutableArray arrayWithCapacity:3]; 

[vertex addObject:[NSNumber numberWithFloat:1.0]]; 
[vertex addObject:[NSNumber numberWithFloat:2.0]]; 
[vertex addObject:[NSNumber numberWithFloat:3.0]]; 

[vertex makeObjectsPerformSelector:@selector(doSomethingToObject:)]; 

Je ne suis pas sûr de ce sélecteur à utiliser pour ce faire, s'il vous plaît aider!

Répondre

0

Réponse courte - no.

NSNombre d'un simple conteneur pour une valeur primitive. Il ne fait aucun travail mathématique. La méthode makeObjectsPerformSelector peut être utilisée pour dire à chaque objet du tableau de faire quelque chose. Mais la classe de chacun de ces objets doit avoir la méthode pour laquelle le sélecteur est destiné. NSNumber ne fournit également aucune méthode pour modifier la valeur stockée. Donc, même si vous avez ajouté une catégorie à NSNumber pour faire le calcul, vous devrez toujours remplacer l'ancienne valeur dans le tableau par celle nouvellement calculée.

Je pense qu'une meilleure solution serait d'ajouter une méthode de catégorie à NSMutableArray pour faire le travail. Il examine le contenu, calcule chaque nouvelle valeur et remplace chaque membre du tableau par le nouveau.

+0

Merci pour vos réponses, les gars! @Jason: L'utilisation de NSMutableArray me permet d'ajouter des valeurs à la fin. Je ne suis pas sûr comment implémenter même en utilisant un tableau primitif. La solution que j'ai trouvée est similaire à la vôtre. \t NSMutableArray * vertex2 = [[NSMutableArray alloc] init]; \t int i = 0; \t pour (NSNumber * flt dans le vertex) { [vertex2 addObject: [NSNumber numberWithFloat: [[sommetx objectAtIndex: i] floatValue] * 10]]; \t \t i ++; \t \t \t} Je dois conserver la matrice d'origine. En bref, le premier tableau est les sommets de la sphère unité, le second est leur transformation. @Derek: Qu'est-ce qu'une méthode de catégorie? Est-il plus facile à lire? – nebulus

+0

Cherchez les catégories dans votre manuel convivial Objective C. Fondamentalement, une catégorie est un moyen d'ajouter/ajouter une classe avec des méthodes supplémentaires sans étendre sa hiérarchie. Par exemple, c'est un moyen d'ajouter des méthodes supplémentaires à NSArray. Ensuite, lorsque vous avez besoin de ces méthodes, vous effectuez une importation de votre fichier d'en-tête de catégories (tout comme l'importation d'un fichier .h) et les méthodes que vous avez définies sont immédiatement disponibles sur chaque instance de classe NSAarry. C'est un excellent moyen d'augmenter les classes de base sans créer d'extensions. La seule limite est que vous ne pouvez pas ajouter de variables, seulement des méthodes. – drekka

+0

Vous pouvez trouver la documentation de pommes sur eux à http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html – drekka

2

Pas facilement, non. Vous devez parcourir le tout et remplacer toutes ces instances de NSNumber par de nouvelles instances de NSNumber (NSNumber lui-même est immuable). Ainsi, par exemple:

for(int i = 0; i < [vertex count]; i++) 
    [vertex replaceObjectAtIndex:i withObject:[NSNumber numberWithFloat:[[vertex objectAtIndex:i] floatValue] * 10.0f]]; 

De toute évidence, ceci est plutôt difficile à lire. Vous feriez probablement mieux d'utiliser simplement un tableau de flottants régulier et primitif si vous allez les manipuler souvent (par exemple, en leur appliquant des transformations).