Question

Lorsque l'utilisateur démarre l'application que je veux montrer la stockholm.xib et il fait ici:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    NSUserDefaults *startPage =[NSUserDefaults standardUserDefaults];
    NSString *page =[startPage stringForKey:@"page"];
    NSLog(page);

    if(page==nil)
    {
        //Do nothing

    }
    else if ([page isEqualToString:@"Default"])
    {
        //Do nothing
    }

    else if ([page isEqualToString:@"Stockholm"])
    {
        NSLog(@"going to Stockholm");
        Stockholm *Start =[[Stockholm alloc]initWithNibName:nil bundle:nil];
        [self presentModalViewController:Start animated:YES];


    }
    else {
        NSLog(@"HAHA");

}

mais lorsque l'utilisateur ferme la stockholm.xib en utilisant:

[self dismissModalViewControllerAnimated:YES];

après l'animation se fait, les accidents de l'application. et la raison en est, je suppose, viewDidAppear appelle deux fois et il est donc d'essayer d'ouvrir le fichier récemment fermé xib.

maintenant, comment puis-je appeler la vue ne semble qu'une seule fois? de sorte que lorsque l'utilisateur revient de Stockholm le viewDidAppear appelé coutume? toute autre solution?

Thanx:)

Était-ce utile?

La solution

Vous pouvez essayer de déplacer toutes ces fonctions dans la méthode viewDidLoad: au lieu du viewDidAppear. Que l'on tire une seule fois. À moins qu'il y ait une raison pour vous de ne pas ...?

EDIT: plus de code pour montrer ce que je veux dire dans le commentaire

dans le fichier .h:

BOOL firstTime;

dans le fichier .m:

-(void)viewDidLoad {
   NSLog(@"viewDidLoad actually fired");
   //...
   firstTime = YES;
}
-(void)viewDidAppear {
   //...
   if(firstTime){
      //show it
      firstTime = NO;
   }
}

Autres conseils

Vous pouvez utiliser GCD, aussi, si votre classe a un domaine tel que:

@interface MyClass {
    dispatch_once_t once;
}

@end

@interface MyClass {
    - (void)viewDidAppear:(BOOL)animated {
        dispatch_once(&once, ^{
            // do business
        });
    }
@end

Vous pouvez ajouter la propriété comme BOOL chargé à votre viewcontroller, mettre à false dans le viewDidLoad, puis faites votre méthode viewDidAppear comme:

- (void)viewDidAppear:(BOOL)animated {
    if (!loaded) {
        //code
    } else {
        return;
    }
    loaded = YES;
}

Cela fonctionne pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top