2010-06-14 4 views
0

J'ai un tableau initialisé dans mon RootViewController et une méthode qui ajouteObjects à un tableau. J'ai créé un objet RootViewController dans mon SecondViewController. La méthode s'exécute (génère un message) mais n'ajoute rien au tableau, et le tableau semble vide. Le code est ci-dessous, des suggestions?Méthode dans RootViewController ne pas stocker de tableau

RootViewController.h

#import "RootViewController.h" 
#import "SecondViewController.h" 

@implementation RootViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    myArray2 = [[NSMutableArray alloc] init]; 

    NSLog(@"View was loaded"); 
} 
-(void)addToArray2{ 
    NSLog(@"Array triggered from SecondViewController"); 
    [myArray2 addObject:@"Test"]; 
    [self showArray2]; 
} 

-(void)showArray2{ 
    NSLog(@"Array Count: %d", [myArray2 count]); 
} 
-(IBAction)switchViews{ 
    SecondViewController *screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentModalViewController:screen animated:YES]; 
    [screen release]; 
} 

SecondViewController.m

#import "SecondViewController.h" 
#import "RootViewController.h" 

@implementation SecondViewController 

-(IBAction)addToArray{ 

    RootViewController *object = [[RootViewController alloc] init]; 
    [object addToArray2]; 

} 
-(IBAction)switchBack{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

EDIT *************

Avec le code de Matt Je suis l'erreur suivante :

"spécificateur-qualifier-liste attendu avant 'RootViewController'"

Répondre

0

Il vous manque quelques fondamentaux très essentiels ici. Si vous allouez un nouveau RootViewController dans votre SecondViewController, ce n'est pas la même instance que celle que vous avez utilisée pour créer votre SecondViewController, donc il n'aura pas de référence au tableau auquel vous ajoutez des objets. Ce que vous essayez de faire ne fonctionnera pas. Vous devez créer un ivar dans votre SecondViewController pour votre RootViewController et y accéder dans la seconde vue. Quelque chose comme ceci:

-(IBAction)switchViews{ 
    SecondViewController *screen = [[SecondViewController alloc] 
             initWithNibName:nil bundle:nil]; 
    screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [screen setRootViewController:self]; 
    [self presentModalViewController:screen animated:YES]; 
    [screen release]; 
} 

Votre Ivar aurait besoin déclaré comme celui-ci dans le SecondViewController.h:

@property (nonatomic, retain) RootViewController *rootViewController; 

Et puis synthétisée dans le .m

Ensuite, vous pouvez accéder au Ivar de dans votre SecondViewController:

-(IBAction)addToArray{ 
    [[self rootViewController] addToArray2]; 
} 
+0

Laissez-moi vous demander. Le [screen setRootViewController: self] fait quoi? D'après ce que je pense, cette ligne de code fait presque le RootViewController le contrôleur natif lorsque la plume de SecondViewController est chargée? – Tony

+0

Il donne simplement à votre SecondViewController une référence au RootViewController afin qu'il puisse y accéder et appeler sa méthode -addToArray2 que vous avez créée. Je ne suis pas sûr de ce que vous entendez par contrôleur * natif *. –

+0

Peu importe que vous avez effacé ma confusion :) Je vais essayer cela. Merci pour l'explication. – Tony

Questions connexes