1

我发现了许多类似的问题,但无论如何都找不到我的问题的解决方案。所以,我的应用程序(它由 tabView 组成)需要在第一次启动后从服务器下载数据。为此,它调用模态视图控制器,在其中使用 Reachability.h/m 和 NSNotification defaultCenter 检查互联网连接。如果可以访问互联网,则开始下载并保存数据。完成后,我想关闭模式打开的视图控制器,但它一遍又一遍地重新加载。我坚持了将近2天,请帮忙:)

这是我的代码的一部分:在第一个 ViewController

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    //checking for data if not calls modalViewController
    if(firstStart){
        [self performSegueWithIdentifier:@"startDownload" sender:self];
    }

}

在第二个(模态视图控制器)

- (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];  

}

在 checkNetworkStatus 完成 检查互联网连接是否存在互联网连接 执行 JSON 下载和解析,最后调用 Close 方法

-(void)Close
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

在这个调用之后,屏幕转到第一个 ViewController 并立即变为第二个,所有的东西都再次执行,它有点卡在循环中。

4

1 回答 1

1

问题是第一个视图控制器viewDidAppear不仅在它第一次出现时被调用,而且在第二个视图控制器的模态被关闭并且第一个视图重新出现时也被调用。并viewDidAppear检查一些变量,firstStart但显然这个变量不是在第一个控制器的初始值和第一个控制器的第二个firstStart之间没有正确重置。viewDidAppearviewDidAppear

您要么需要让第二个控制器以某种方式更新此firstStart变量的值(例如,通过委托协议),要么重新计算firstStart第一个视图重新出现的时间。

于 2013-02-17T14:00:54.790 回答