2010-03-18 65 views
0

我有一個很長的- (void)viewDidLoad { }函數,它使用互聯網來加載頁面,並且每當應用程序加載URL時,屏幕都是黑屏。我有一個UIActivityIndicator安裝程序來顯示地址正在加載,但我不知道如何防止它看起來好像應用程序沒有響應,並且我不想顯示網絡活動指示器[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];,因爲屏幕會仍然是黑色的,只在頂角有一個裝載機。我的代碼如下:iPhone SDK - (void)viewDidLoad {} - 顯示進度

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

回答

0

你也許可以添加一個文本說東西正在加載。 或者您也可以使用NSURLConnection委託方法來提供進度條,而不僅僅是進度指示器。

1

而不是在viewDidLoad中阻塞,嘗試啓動一個新的線程進行加載。然後,您只需使用文字初始化視圖,即可以加載並更新所需的任何內容。