Question

Je suis une vue simple de mise en œuvre d'alerte avec indicateur d'activité pour montrer à l'utilisateur alors que l'application effectue la restauration de la base de données. Tout va bien, sauf que je ne vois pas le point de vue d'alerte, à moins que je commente la ligne automatique rejeter (dernière un ici).

Ok, la restauration de la base de données est assez rapide, mais j'attendre à le voir, même si, pour un instant, non? Je peux voir l'écran get est un peu plus sombre au cours de l'animation, mais c'est tout. J'ai aussi essayé de mettre une boucle pour prolonger le temps, le temps se prolonge, mais toujours pas d'alerte vue.

Il n'y a rien de mal dans la façon dont le point de vue d'alerte est appelée, car si je commente le destituer, je peux le voir ... seulement pour toujours. Tout le monde a une idée ici?

Avant que quelqu'un dit, j'ai essayé de changer le délégué du alertView à self comme posté ici , mais il n'a pas aidé.

// First we prepare the activity indicator view to show progress indicator
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

[activityView setFrame:CGRectMake(121.0f, 50.0f, 37.0f, 37.0f)];
[activityView startAnimating];

// Then we put it in an alert view
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[alertView addSubview:activityView];
[alertView show];

// Finally we operate the restore
[[SQLManager sharedSQL] restoreDatabase:[restoreDatabaseURL path]];

// And we can dismiss the alert view with the progress indicator
[alertView dismissWithClickedButtonIndex:0 animated:NO];
Était-ce utile?

La solution

Je ne suis pas sûr pourquoi cela arrive, mais je rencontre de temps en temps aussi. Une façon j'ai obtenu quelque chose comme ça au travail est à l'aide performSelector:withObject:afterDelay: sur le prochain appel, comme ceci:

// First we prepare the activity indicator view to show progress indicator
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

[activityView setFrame:CGRectMake(121.0f, 50.0f, 37.0f, 37.0f)];
[activityView startAnimating];

// Then we put it in an alert view
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[alertView addSubview:activityView];
[alertView show];

// Finally we operate the restore
// [[SQLManager sharedSQL] restoreDatabase:[restoreDatabaseURL path]];
[[SQLManager sharedSQL] performSelector:@selector(restoreDatabase:) withObject:[restoreDatabaseURL path] afterDelay:0.25];


// And we can dismiss the alert view with the progress indicator
[alertView dismissWithClickedButtonIndex:0 animated:NO];

performSelector Documentation

Autres conseils

Sons comme il est lui-même a rejeté presque instantanément. Si vous ajoutez une boucle, il gèlera probablement tous les autres calculs qui signifie que votre vue activité ne sera pas affiché jusqu'à la rupture de la boucle.

Vous pouvez essayer d'utiliser un NSTimer pour appeler une autre fonction pour déterminer si la restauration est terminée ou non;

// Setup our the timer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self 
                                                selector:@selector(checkRestore)
                                                userInfo:nil
                                                 repeats:YES];


// Timer function checking for completion
-(void)checkRestore {
    if (restore is complete) {
        [alertView dismissWithClickedButtonIndex:0 animated:NO];
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top