我发现了许多类似的问题,但无论如何都无法找到问题的解决方案。 因此,我的应用程序(它由tabView组成)需要在第一次启动后从服务器下载数据。为了执行此操作,它调用模态视图控制器,它使用Reachability.h / m和NSNotification defaultCenter检查Internet连接。如果可以访问互联网,则启动下载并保存数据。完成后我想关闭modaly打开的viewcontroller,但它一遍又一遍地重新加载。我坚持了将近2天,请帮忙:)。
这是我的代码的一部分:在第一个ViewController
中-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//checking for data if not calls modalViewController
if(firstStart){
[self performSegueWithIdentifier:@"startDownload" sender:self];
}
}
在第二个(模态ViewController)
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:YES];
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [Reachability reachabilityForInternetConnection];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"];
[hostReachable startNotifier];
}
-(void)Close
{
[self dismissViewControllerAnimated:YES completion:nil];
}
在此调用之后,屏幕转到第一个ViewController并立即更改为第二个并且所有内容再次执行,它有点卡在循环中。
答案 0 :(得分:1)
问题是第一个视图控制器的viewDidAppear
不仅在它第一次出现时被调用,而且在第二个视图控制器的模态被解除并且第一个视图重新出现时被调用。 viewDidAppear
检查某个变量firstStart
,但显然这个firstStart
变量未在第一个控制器的初始viewDidAppear
和第二个viewDidAppear
之间正确重置1}}第一个控制器。
您需要让第二个控制器以某种方式更新此firstStart
变量的值(例如,通过委托协议),或者在第一个视图重新出现时重新计算firstStart
。