2011-10-29 2 views
0

J'essaie de créer un modèle avec plusieurs images dans un style de modèle d'usine. J'ai une classe qui gère les individus, une classe qui gère le groupe d'individus et un ViewController.Objectif-C: Gestion de l'image entre les classes

testImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)]; 
testImage.image = [UIImage imageNamed:@"myImage.png"]; 
testImage.animationDuration = 1.5; 
testImage.contentMode = UIViewContentModeCenter; 
[self.view addSubview:testImage]; 

http://jcdeveloperworld.blogspot.com/2009/07/iphone-game-tutorial-part-1.html - Merci

Ce code fonctionne quand il est juste dans le viewController, et maintenant je suis en train de faire les individus garder une trace de leur propre image. J'ai donc mis le

testImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)]; 
testImage.image = [UIImage imageNamed:@"myImage.png"]; 
testImage.animationDuration = 1.5; 
testImage.contentMode = UIViewContentModeCenter; 
[self.view addSubview:testImage]; 

dans une classe séparée, puis essayé de l'afficher à partir de mon viewController. Je crois comprendre que je ne peux pas simplement dire à viewController d'afficher quelque chose d'une classe séparée.

flock *newFlock = [[flock alloc] init]; 
[newFlock makeFlock]; 


NSMutableArray *tempFlock = [[NSMutableArray alloc] init]; 
tempFlock = newFlock.theFlock; 

individualsClass *tempIndividual = [[individualsClass alloc] init]; 
tempIndividual = [tempFlock objectAtIndex:0]; 

UIImageView *tempImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)]; 

tempImage = tempIndividual.individualImage; 

[self.view addSubview:tempImage]; 

J'ai aussi essayé sans toute la copie, mais la notation des points a commencé à obtenir de la manière parce que je suis l'accès aux propriétés des objets dans un NSMutableArray (ce qui semble ridiculement difficile dans C objectif). Je pourrais utiliser un peu d'aide pour comprendre cela aussi

ie. Je suis un peu nouveau à l'objectif C, alors peut-être que j'attaque mal ce problème. Ceci est fait pour une application iPad

Répondre

1

Ce que vous essayez de faire n'est pas clair, mais vous faites certainement beaucoup de choses dont vous n'avez pas besoin. Tenez compte de ces lignes de votre code:

NSMutableArray *tempFlock = [[NSMutableArray alloc] init]; 
tempFlock = newFlock.theFlock; 

La première ligne déclare une variable nommée tempFlock de type NSMutableArray *. Ensuite, il crée et initialise un NSMutableArray vide et l'attribue à tempFlock. La deuxième ligne affecte ensuite newFlock.theFlock à tempFlock, écrasant la seule référence au tableau que vous avez créé dans la première ligne. Vous pouvez simplement dire ceci:

NSMutableArray *tempFlock = newFlock.theFlock; 

Quoi qu'il en soit, la syntaxe correcte pour votre dernier bloc est la suivante:

[flock.theFlock objectAtIndex:1].individualImage.image 

c'est ce que vous voulez donc peut-être à faire:

[self.view addSubview:[flock.theFlock objectAtIndex:1].individualImage]; 

également , flock et individualsClass ne sont pas de bons noms de classe en Objective-C. Flock et Individual pourraient être de meilleurs noms.

Et il est déroutant que flock instances ont une propriété nommée theFlock. Il semble que theFlock est juste un tableau de personnes, donc un meilleur nom pour la propriété serait probablement individuals.

+0

Je tiens également à souligner qu'il est important de Respectez les conventions de dénomination, et cela signifie que les noms de classes doivent toujours commencer par des majuscules. Lorsque vous utilisez ARC, ces conventions deviennent en partie des règles qui sont appliquées. Mais même sans ARC, vous rendrez votre vie et celle des autres personnes travaillant avec votre code plus facile lorsque vous travaillez avec les mêmes conventions que tout le monde. – DarkDust

0

Si toute la syntaxe "point" pose des problèmes de compréhension, ne les utilisez pas, elles ne sont qu'une autre syntaxe pour l'appel de méthode. [MyInstance value] est la même que myInstance.value, qui peut être vue comme une simple substitution.

Éviter également les instructions composées longues peut aider à comprendre, utilisez plutôt une ou plusieurs variables nommées bien intermédiaires. Faites confiance au compilateur pour les optimiser.

Ainsi, comme @rob écrit:

[flock.theFlock objectAtIndex:1].individualImage.image 

l'équivalent pourrait être:

[[[[flock theFlock] objectAtIndex:1] individualImage] image] 

Divisé en plusieurs déclarations:

tempFlock = [[flock theFlock] objectAtIndex:1]; 
tempIndividual = [tempFlock individualImage]; 
image = [tempIndividual image]; 
Questions connexes