我有两个ViewController并使用(tableview click)seque来打开第二个ViewController。 我的问题是,第二视图控制器加载了大量数据。因此,切换之间的时间是<> 10秒。在这10秒内,App冻结了。多数民众赞成,但我怎么能插入像“请等待......”这样的“弹出”或“警报”消息。我已经为Popups和Alerts测试了很多教程,但是当SecondView Controller完全加载时,Popup / Alter只显示。我将显示消息BEVOR,SecondViewController被编译加载。
示例:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// IF i set here the ALERT, the Alter was only show, when the Second View Controller is complete loaded!
NSDictionary *rowVals = (NSDictionary *) [SearchNSMutableArray objectAtIndex:indexPath.row];
[self performSegueWithIdentifier:@"Foo" sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"Foo"]) {
// Get indexpath from Tableview;
NSIndexPath *indexPath = [self.SearchUITableView indexPathForSelectedRow];
// Get Data from Array;
NSDictionary *rowVals = (NSDictionary *) [self.SearchNSMutableArray objectAtIndex:indexPath.row];
// Destination View;
[MySecondViewController alloc];
MySecondViewController *MyView = (MySecondViewController *)segue.destinationViewController;
}
}
答案 0 :(得分:0)
您正尝试使用错误的解决方案解决问题。该解决方案同样糟糕,因为弹出窗口也会冻结10秒钟。如果添加更多数据并需要30秒或10分钟,该怎么办?您是否希望您的用户看到他们可以在10分钟内解雇的对话?
您是从互联网上获取数据吗?如果是这样,您需要在后台异步获取数据。
如果您从磁盘加载它,那么加载太多可能会在一个屏幕上显示,您只需加载一小部分,如果仍然需要很长时间你需要异步加载它的时间。
您的应用程序应该有一个模型类,负责从Internet获取数据。 Google模型视图控制器可获取有关模型的一些背景信息。
只要应用程序启动,模型就可以开始下载需要在后台删除的数据(这个主题太大,无法在此处回答如何操作)。
View控制器可以在下载数据时启动,并且可以在等待时显示旋转活动指示轮或进度条或对话框等。重要的是GUI不会冻结。
当模型下载了数据时,它需要告诉视图控制器数据现在可用,它可以使用NSNotification中心进行。
你有很多需要调查和学习的事情,如果没有GUI冻结它需要正确完成,没有捷径,你需要学习很多东西。
答案 1 :(得分:0)
@马丁,
我找到了解决方案:
// Send the Request;
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
因此请求是异步的。感谢您的回答。伟大的+1