Вопрос

у меня длинный - (void)viewDidLoad { } функция, которая использует Интернет для загрузки страницы, и всякий раз, когда приложение загружает URL-адрес, экран становится черным.у меня есть UIActivityIndicator настроить, чтобы показать, что адрес загружается, но я не знаю, как сделать так, чтобы не казалось, что приложение не отвечает, и я не хочу показывать индикатор сетевой активности [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; потому что экран все равно будет черным, просто с загрузчиком в верхнем углу.Мой код ниже:

- (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
    }
}

Нет правильного решения

Другие советы

Вместо блокировки viewDidLoad попробуйте запустить новый поток, который выполняет загрузку.Затем вы просто инициализируете представление с текстом, в котором говорится, что все загружается, и обновляете любой необходимый контент, как только он станет доступен.

Возможно, вы можете добавить текст о том, что что-то загружается.Или вы также можете поиграть с методами делегата NSURLConnection, чтобы предоставить индикатор выполнения, а не просто индикатор прогресса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top