Ich kann meine Warnansicht nicht sehen, es sei denn, ich kommentiere die automatische Entlassung aus
-
25-10-2019 - |
Frage
Ich implementiere eine einfache Warnansicht mit Aktivitätsanzeige, die dem Benutzer angezeigt werden kann, während die App die Wiederherstellung der Datenbank durchführt. Alles ist in Ordnung, außer dass ich die Alarmansicht nicht sehen kann, es sei denn, ich kommentiere die automatische Entlassungszeile (letztes hier).
OK, die Wiederherstellung der Datenbank ist ziemlich schnell, aber ich würde es trotzdem erwarten, sie zu sehen, auch wenn es für einen Moment, nein? Ich kann sehen, wie der Bildschirm während der Animation etwas dunkler ist, aber das ist alles. Ich habe auch versucht, eine für die Schleife zu setzen, um die Zeit zu verlängern, die Zeit erstreckt sich, aber immer noch keine Alarmansicht.
Es ist nichts Falsches an der Art und Weise, wie die Alarmansicht aufgerufen wird, da ich sie, wenn ich die Entlassung kommentiere, sie sehen kann ... nur für immer. Hat jemand hier eine Idee?
Bevor jemand es sagt, habe ich versucht, den Delegierten der Warnansicht auf zu ändern self
Wie veröffentlicht hier, aber es half nicht.
// 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];
Lösung
Ich bin mir nicht sicher warum Das passiert, aber ich begegne es auch gelegentlich. Eine Möglichkeit, wie ich so etwas zum Arbeiten gebracht habe, ist die Verwendung performSelector:withObject:afterDelay:
Beim nächsten Anruf wie diesen:
// 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];
Andere Tipps
Klingt so, als würde es sich fast augenblicklich entlassen. Wenn Sie eine für die Schleife hinzufügen, wird wahrscheinlich alle anderen Berechnungen gefriert, was bedeutet, dass Ihre Aktivitätsansicht erst angezeigt wird, wenn die Schleife bricht.
Sie können versuchen, einen NSTIMER zu verwenden, um eine andere Funktion aufzurufen, um festzustellen, ob die Wiederherstellung vollständig ist oder nicht.
// 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];
}
}