2013-02-17 50 views
1

我發現了很多類似的問題,但無法找到我的問題的解決方案。 因此,我的應用程序(它由tabView組成)需要在第一次啓動後從服務器下載數據。要執行此操作,它會調用模式viewcontroller,它使用Reachability.h/m和NSNotification defaultCenter檢查Internet連接。如果互聯網可用,則開始下載並保存數據。完成後,我想關閉模態打開的viewcontroller,但它一遍又一遍地重新加載。我堅持使用這種近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下載和解析,最後稱爲關閉方法

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

在這次調用之後,屏幕進入第一個ViewController並立即變爲秒,所有的東西都會再次執行,它在循環中有點困難。

+0

也許第一次開始總是如此。你如何設定第一步? – audub 2013-02-17 13:41:03

+0

你說第一次開始是什麼意思? – 2013-02-17 13:55:22

+0

我已經做了siple項目來測試。 2 viewcontorllers 1-st在viewdidappear中通過segue調用。 2-nd從他的viewdidappear中關閉[self dismissViewControllerAnimated:YES completion:nil]; - 我有完全相同的情況, – 2013-02-17 14:01:23

回答

1

問題是,第一個視圖控制器的viewDidAppear不僅在第一次出現時被調用,而且在第二個視圖控制器的模式被解除且第一個視圖重新出現時被調用。並且viewDidAppear檢查了一些變量,firstStart,但顯然這個變量在第一個控制器的初始viewDidAppear與第一個控制器的第二個viewDidAppear之間沒有得到正確的重置。

您需要讓第二個控制器以某種方式更新此firstStart變量的值(例如,通過委託協議),或者在第一個視圖重新出現時重新計算firstStart

+0

actualy第一次啓動是從文件填充的數組,文件是在第二個viewcontroller(在JSON下載和解析後)創建的,所以在第一次調用secondviewcontroller之後創建該文件並且它類似於你已經寫了,但無論如何,謝謝! – 2013-02-17 14:28:11

+0

好吧,讓我們讓事情更簡單,而不是調用performSegueWithIdentifier我是從的appdelegate – 2013-02-17 14:38:53

+0

打開secondview - (BOOL)申請:(UIApplication的*)應用程序didFinishLaunchingWithOptions:(NSDictionary的*)launchOptions {// 從文件 如果看完之後(!self.largeStickerFileNames) { UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@「MainStoryboard」bundle:nil]; JSONDownloadViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@「downloadView」]; [(UINavigationController *)self.window.rootViewController pushViewController:vc animated:YES]; } return YES; } – 2013-02-17 14:40:35