Domanda

I sono l'attuazione di una semplice visione di avviso con indicatore di attività per mostrare all'utente, mentre l'applicazione sta eseguendo il ripristino del database. Tutto è bene, tranne che non riesco a vedere il panorama avviso, a meno che io commento la linea respingere automatica (ultimo qui).

Ok, il ripristino del database è abbastanza veloce, ma ancora mi aspetto di vederlo, anche se per un istante, no? Posso vedere il get schermo è un po 'più scura durante l'animazione, ma questo è tutto. Ho anche provato a mettere un ciclo for per estendere il tempo, il tempo estende ma ancora vista senza avviso.

Non c'è niente di sbagliato nel modo in cui la visualizzazione degli avvisi è chiamato, perché se io commento la respingere, posso vederlo ... solo per sempre. Chiunque ha un'idea qui?

Prima che qualcuno lo dice, ho provato a cambiare il delegato del alertView a self come pubblicato qui , ma non ha aiutato.

// 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];
È stato utile?

Soluzione

Non sono sicuro perché questo accade, ma ho incontrato di tanto in tanto pure. Un modo ho ottenuto qualcosa di simile per il lavoro è quello di utilizzare performSelector:withObject:afterDelay: sulla prossima chiamata, in questo modo:

// 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

Altri suggerimenti

suona come esso stesso c'è di che respinge quasi istantaneamente. Se si aggiunge un ciclo for, sarà probabilmente bloccare tutti gli altri calcoli che significa che la vista l'attività non verrà visualizzato fino alla rottura del loop.

Si potrebbe provare a utilizzare un NSTimer per chiamare un'altra funzione per determinare se il ripristino è completo o no;

// 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];
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top