我正在我的App Delegate類中異步下載JSON訂閱源。現在數據需要一段時間才能加載,因此我的表格視圖首先顯示爲空,然後在幾秒鐘後填充。因此,我想要:異步加載JSON並顯示活動指標視圖
1-找出導致此延遲的原因。因此,請保留應用程序中的所有活動:didFinishLaunchingWithOptions方法,並且只加載所有內容後才加載VC。
OR
2-顯示活動性指示符直到表填充數據。
現在在第一種情況下,我非常肯定我在錯誤的時間推視圖控制器。我嘗試過使用它,但似乎這是我的應用程序構建和運行的唯一方式。
在第二種情況下,我想知道哪個「連接」方法首先被調用,哪一個最後被調用。因此,我將能夠在第一種方法中啓動活動指示器視圖,並在最後一種方法結束時釋放。
以下是我的代碼。任何建議/幫助非常感謝。謝謝你的閱讀。
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Error"
message:@"Please check your network connection and relaunch the application"
delegate:self
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
if ([responseString isEqualToString:@"Unable to find specified resource."]) {
NSLog(@"Unable to find specified resource.n");
}
else {
ListingsViewController *listingsViewController = [[ListingsViewController alloc] initWithNibName:@"ListingsViewController" bundle:nil];
listingsViewController.jsonData = responseString;
[self.navigationController pushViewController:listingsViewController animated:NO];
[self.navigationController setViewControllers:[NSArray arrayWithObject:listingsViewController] animated:NO];
[listingsViewController release];
}
[connection release];
[responseData release];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Start the HTTP request
responseData = [[NSMutableData data] retain];
NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:@"http://www.shoofeetv.com/iphonexml/view/all_channels.json"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
// Display the navigation controller
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
將所有aysnc http請求包裝到另一個方法或另一個類中?你知道我在哪裏可以找到一個關於objective-c http異步方法的好教程嗎?我到處尋找,我似乎還沒有很好地理解它。謝謝.. – darksky 2011-06-13 08:24:38
在另一個類 - 例如稱之爲HttpClient。老實說,最好的地方是蘋果文檔http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html - 閱讀所有的方法你可以實現和每個人都做什麼。如果你真的無法理解它(或者根本不能被打擾),請查看http://allseeing-i.com/ASIHTTPRequest/How-to-use - 特別是異步的東西。這是NSURLConnection的一個很好的包裝類,應該讓你的生活更輕鬆。 – Tyler 2011-06-13 08:55:43
謝謝泰勒.. – darksky 2011-06-13 11:57:58