2011-04-20 5 views
0

Donc, j'essaie de faire une méthode partagée dans ma classe Brain qui va vérifier l'étiquette sur un bouton enfoncé (les boutons des éléments sont dans différentes classes) et ensuite ajouter une image à une vue ShoppingList en tenant compte de l'ordre d'ajout (la première image ajoutée va à la position 0,0, la seconde à la position 80,0 etc.).Comment appeler une méthode d'une classe différente?

J'ai un cours de petit déjeuner qui représente les ingrédients du petit déjeuner et je veux ajouter une photo d'un thé à une autre vue appelée ShoppingList.

J'ai écrit une méthode dans Brain qui ajoute une image à un imageView et renvoie un imageView qui est ensuite passé localement au bouton pressé.

Il construit mais quand j'appuie sur le bouton Thé, l'application se bloque.

Voici mon code:

Brain.h

@interface Brain : NSObject { 
@private 
    UIImage *image; 
    UIImageView *imageView; 

} 

@property (retain) UIImageView *imageView; 
@property (retain) UIImage *image; 

- (id)performOperation:(NSString *)operation; 
@end 

Brain.m

@implementation Brain 

@synthesize imageView; 
@synthesize image; 

- (UIImageView *)performOperation:(NSString *)operation 
{ 
    if ([operation isEqual:@"Tea"]) { 
     image = [UIImage imageNamed:@"Tea_photo.jpg"]; 
     imageView = [[UIImageView alloc]initWithImage:image]; 

     imageView.frame = CGRectMake(0, 0, 80, 80); 

     return imageView; 


     //[shoppingList.view addSubview:imageView]; 
     //[imageView release]; 

    } 

    else return 0; 
} 

@end 

Breakfast.h

@interface Breakfast : UIViewController { 

    IBOutlet ShoppingList *shoppingList; 
    Brain *brain; 

} 
- (IBAction)addItemToShoppingList:(UIButton *)sender; 

- (IBAction)goToShoppingList; 

- (IBAction)goBack; 


@end 

Breakfast.m

@implementation Breakfast 

- (Brain *)brain 
{ 
    if (!brain) brain = [[Brain alloc] init]; 
    return brain; 

} 



- (IBAction)addItemToShoppingList:(UIButton *)sender 
{ 
    NSString *operation = [[sender titleLabel] text]; 
    UIImageView *imageView = [[self brain] performOperation:operation]; 
    [shoppingList.view addSubview:self.brain.imageView]; 

    //UIImageView *imageView = [[UIImageView alloc]initWithImage:image]; 

    //imageView.frame = CGRectMake(0, 0, 80, 80); 


    //[shoppingList.view addSubview:imageView]; 
    //[imageView release]; 

} 
- (IBAction)goToShoppingList 
{ 
    [self presentModalViewController:shoppingList animated:NO]; 
} 

- (IBAction)goBack 
{ 
    [self dismissModalViewControllerAnimated:NO]; 
} 

@end 

S'IL VOUS PLAÎT AIDER, son pour ma thèse.

+0

Alors, quelle est la question? –

+0

Pouvez-vous publier la pile d'appels à partir du plantage (sous Afficher la console dans XCode)? –

+1

Je pense que la question est "pourquoi est-ce qu'il plantage?" –

Répondre

1
IBOutlet ShoppingList *shoppingList; 

Pourquoi faire cela IBOutlet? N'est pas ShoppingList une classe que vous avez créée. Pas que cela résout votre accident. Pour cela vous devez poster le journal de l'accident ....

Et aussi dans votre code, je ne peux pas voir allocation pour shoppingList alors comment pouvez-vous être capable de l'utiliser. Vous devez allocate l'objet dans la classe Brain sinon cela n'a aucun sens.

+0

Bon appel ... Peut-être le 'UIViewController' au lieu de' ShoppingList'? Pour compléter si c'est bien une classe séparée: utilisez '@ property' et' @ synthesize' pour 'shoppingList' – Joetjah

0

Je n'ai pas lu votre code. Mais sur la base de votre description, je peux vous suggérer de créer un protocole

Questions connexes