2009-08-26 9 views
0

Je cherche un moyen de stocker des références à des variables dans un NSMutableArray. Comme les variables vont être créées de manière dynamique en fonction de ce que l'utilisateur a choisi, je veux pouvoir simplement trier ce tableau et obtenir des références à ces variables créées. En cas de problème, je crée un projet iPhone. Cependant, lorsque je tente de le faire en utilisant le code suivant:Enregistrer des références à une variable dans NSMutableArray

for (int a = 0; a < 10; a++) 
{ 
UIView *tempView; 
[listingOfViews addObject:tempView]; 
} 

for (int a = 0; a < [listingOfViews count]; a++) 
{ 
[listingOfViews objectAtIndex:a] = defaultViewStructure; 
} 

Il me donne cette erreur: « Erreur: lvalue nécessaire comme opérande gauche d'affectation »

Toutes les idées?

EDIT: Aussi, je reçois cette erreur: "Erreur: demande de membre 'taille' dans quelque chose pas une structure ou d'une union"

Lorsque je tente de faire

for (int a = 0; a < [listingOfViews count]; a++) 
{ 
[listingOfViews objectAtIndex:a].size.height = ... 
} 

Répondre

0

Qu'est-ce que vous la moyenne est:

[listingOfViews replaceObjectAtIndex:a withObject:defaultViewStructure]; 

Mais il va se bloquer lorsque vous essayez de mettre ces pointeurs non initialisée tempView dans le tableau. Qu'est-ce que vous essayez vraiment de faire ici? Je pense qu'il est peut-être temps de prendre du recul et de commencer avec les bases d'Objective-C. Il semble que vous essayez de porter les concepts C++ directement dans ObjC, et ils font les choses très différemment. Vous pouvez commencer par Programming in Objective-C, puis probablement Cocoa Programming for Mac OS X. (Ce dernier est basé sur Mac, plutôt que l'iPhone, mais il est toujours le meilleur point de départ.)

+0

Salut Rob: Je ne veux pas vraiment remplacer l'objet, il suffit de définir la valeur de l'objet à la valeur de l'autre objet. Cela fonctionne très bien quand je le fais sans utiliser un NSMutableArray. De plus, le code ci-dessus est simplement un exemple de ce que j'essaie de faire (mon code actuel est plus long) - Dans le cas réel, j'initialise les valeurs de l'UIView. – PF1

+0

Que voulez-vous dire par "définir la valeur de l'objet?" Un UIView n'a pas de valeur. Vous avez, cependant, un pointeur sur un UIView (ce que vous voulez), et vous pouvez donc remplacer le pointeur dans le tableau par un pointeur vers un objet différent, ce que je suppose que vous voulez, et ce que cette méthode ferait faire. –

+0

Vous obtenez le pointeur vers la vue. Si vous avez indiqué [[listOfViews objectAtIndex: a] setNeedsDisplay], cela fonctionnerait correctement. Mais qu'attendez-vous [listingOfViews objectAtIndex: a] = tempView pour faire réellement? Voulez-vous modifier quels objets sont dans le tableau (which replaceObject: atIndex: does)? Ou essayez-vous en quelque sorte de modifier quelque chose en dehors du tableau dans cette ligne de code? Quand vous dites "références" voulez-vous dire comme des références C++ (MyClass &)? Il n'y a pas de telles choses dans ObjC, c'est pourquoi je suis inquiet que vous essayez de penser en C++ en écrivant ObjC, ce qui ne fonctionnera pas. –

1

Pour votre deuxième question:

for (int a = 0; a < [listingOfViews count]; a++) 
{ 
    [listingOfViews objectAtIndex:a].size.height = ... 
} 

Il y a un malentendu (un UIView n'a pas -size , il a un -frame qui inclut une taille), couplé avec quelque chose qui est en fait un peu difficile à cause de la notation dot très confuse qu'ils ont ajouté dans Obj-C 2 et une panne malheureuse du modèle d'objet quand vous arrivez à structs. La façon dont vous faites ce que vous essayez de faire est:

UIView *view = [listingOfViews objectAtIndex:a]; 
NSRect frame = [view frame]; 
frame.size.height = ... 
[view setFrame:frame]; 

Il y a plusieurs façons de condenser le nombre de lignes un peu, mais vous avez besoin de chercher un struct NSRect, le modifier, puis le remettre. Vous ne pouvez pas modifier la hauteur d'un appel sur la plupart des vues.

+0

Salut Rob: Merci pour votre réponse. Cependant, même en utilisant du code comme: [listingOfViews objectAtIndex: a] .center = ... génère toujours cette erreur. Et le code que vous avez fourni ré-enregistrer le pointeur situé dans le tableau avec les modifications? – PF1

+0

La notation par points vous pose le problème. -objectAtIndex: renvoie un 'id' (un pointeur d'objet générique), donc le compilateur ne peut pas savoir quoi faire avec le ".center". Si vous le codez comme je le recommande ci-dessus, le compilateur le comprendra. Le code que j'ai fourni n'a pas besoin de "ré-enregistrer le pointeur". Le pointeur pointe vers autre chose. Cela ne change pas. La chose pointée sur les changements lorsque vous appelez setFrame :. Je vais répéter ma recommandation que vous regardez les livres que j'ai énumérés ci-dessus ou le cours de Stanford iPhone, ou une autre formation de base dans ObjC. Ce sont des concepts fondamentaux pour ObjC. –

Questions connexes