Ich kann meine Warnansicht nicht sehen, es sei denn, ich kommentiere die automatische Entlassung aus

StackOverflow https://stackoverflow.com/questions/8304336

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];
War es hilfreich?

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];

performSelector Dokumentation

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];
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top