Frage

Ich habe eine lange - (void)viewDidLoad { } Funktion, die das Internet nutzt, um eine Seite zu laden, und wenn die Anwendung lädt die URL, wird der Bildschirm schwarz. Ich habe eine UIActivityIndicator Setup zu zeigen, dass die Adresse Laden ist, aber ich weiß nicht, wie es zu verhindern, als scheinbar, wenn die Anwendung nicht reagiert, und ich will nicht, die Netzwerk-Aktivitätsanzeige [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; zeigen, weil der Bildschirm noch schwarz sein, nur mit einem Lader in der oberen Ecke. Mein Code ist unten:

- (void)viewDidLoad {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    email.text = [defaults objectForKey:@"mom_email"];
    pass.text = [defaults objectForKey:@"mom_pass"];
    if (email.text != nil && pass.text != nil) {
        [self login:loginBtn];
    }
}
- (IBAction)login:(id)sender {
    [email resignFirstResponder];
    [pass resignFirstResponder];
    [loader startAnimating]; // Does nothing though
    NSString *em = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)email.text,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
    NSString *ps = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)pass.text,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
    NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:@"localhost" path:[[NSString alloc] initWithFormat:@"/app/login.php?email=%@&pass=%@", em, ps]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *loginResult = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    [loader stopAnimating];
    NSRange range = [loginResult rangeOfString:@"1"];
    if (range.location != NSNotFound) {
        [self dismissModalViewControllerAnimated:YES]; // Doesn't do anything if function called from viewDidLoad
    }
}

Keine korrekte Lösung

Andere Tipps

Statt in der viewDidLoad blockieren, versuchen Sie einen neuen Thread ab und startete die das Laden der Fall ist. Dann init Sie nur die Ansicht mit Text, der sagt Dinge sind Läden und aktualisieren, was Inhalt notwendig ist, sobald es verfügbar ist.

Sie können vielleicht einen Text hinzufügen etwas zu sagen Laden ist. Oder Sie können auch mit der NSURLConnection Delegatmethoden spielen einen Fortschrittsbalken zu schaffen, anstatt nur eine Fortschrittsanzeige.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top