0

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

2 に答える 2

1

viewDidLoad でブロックする代わりに、読み込みを行う新しいスレッドを開始してみてください。次に、読み込み中であることを示すテキストでビューを初期化し、利用可能になったら必要なコンテンツを更新します。

于 2010-03-18T18:16:12.423 に答える
0

何かがロードされているというテキストを追加できます。または、NSURLConnection デリゲート メソッドを使用して、単なる進行状況インジケーターの代わりに進行状況バーを提供することもできます。

于 2010-03-18T18:13:28.783 に答える