Tôi có UITableView từ nguồn cấp dữ liệu RSS bên ngoài.Animate Spinner khi tải trang mới
Khi bạn chọn một hàng, nó sử dụng điều hướng và các trang trình bày từ bên phải, vấn đề là nguồn cấp dữ liệu RSS chứa hình ảnh do đó có thể mất vài giây để tải và không có bất kỳ dấu hiệu nào. nó cho một vụ tai nạn ứng dụng.
Tôi quyết định thêm một spinner để bạn biết rằng trang mới đang tải.
Đây là mã của tôi:
RootViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Loading New Page");
[tableView deselectRowAtIndexPath:indexPath animated:YES];
DetailsViewController *detailViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
detailViewController.item = [rssItems objectAtIndex:floor(indexPath.row/2)];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(160, 240);
[self.view addSubview:spinner];
[spinner startAnimating];
[spinner release];
}
DetailsViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
NSString *imgURL = [item objectForKey:@"image"];
NSData *mydata = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imgURL]];
item_photo.image = [[UIImage alloc] initWithData:mydata];
item_title.text = [item objectForKey:@"title"];
item_date.text = [NSString stringWithFormat:@"Date: %@",[item objectForKey:@"date"]];
item_time.text = [NSString stringWithFormat:@"Time: %@",[item objectForKey:@"time"]];
item_cost.text = [NSString stringWithFormat:@"Cost: £%@",[item objectForKey:@"cost"]];
item_info.text = [item objectForKey:@"description"];
self.navigationItem.title = @"Event Type";
}
Có hai vấn đề với mã này.
- Spinner không hoạt động cho đến sau khi trang mới được tải.
- Spinner không tắt khi nạp.
Nếu có ai có thể giúp tôi giải quyết vấn đề này, tôi sẽ thực sự biết ơn.
Tôi nghĩ rằng bạn vẫn đang mất tích mã nơi sau đó xem chỉ số hoạt động bị ngừng/gỡ bỏ. Ngoài ra: làm thế nào bạn tải các hình ảnh? Nếu bạn đang sử dụng phương pháp chặn (tức là phương thức không chạy trong chuỗi nền), toàn bộ vòng lặp chính của bạn sẽ bị chặn có nghĩa là: không có tương tác người dùng, không hoạt ảnh vv (sẽ giải thích hành vi này). Nếu đây là trường hợp bạn thực sự nên chuyển sang tải không đồng bộ. –
@TriPhoenix Làm thế nào để bạn biết nếu nó là một phương pháp chặn hay không? tôi đã thêm vào mã trên DetailsViewController.m –
Bạn có thể biết cách hoạt động của hàm: các hàm chặn sẽ trả về giá trị ngay lập tức, trong trường hợp này 'initWithContentsOfURL' sẽ đặt dữ liệu vào trong' NSData'so của bạn, hàm funciton không thể trả về trước khi trả lại dữ liệu này. Các yêu cầu không đồng bộ phức tạp hơn theo nghĩa là bạn bắt đầu yêu cầu và sẽ không có kết quả trả về mà đúng hơn là yêu cầu sẽ gọi hàm gọi lại trên mã của bạn khi nó được hoàn tất. Có một số khung công tác như ASIHTTPRequest giúp dễ dàng hơn hoặc bạn có thể sử dụng NSURLConnection và tự làm điều đó. –