2016-05-26 9 views
0

ナビゲーションコントローラからセグリングする前にデータをダウンロードしようとしていますが、私のprepareforsegueは情報のダウンロードを待っていません。守らなければならないのは、呼び出されていなくてもよい。ナビゲーションコントローラのバックボタンでSegueを準備する

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    print("prepareforsegue") 
    reloadProgram() { (result:String) ->() in 
    print("reloaded") 
    } 
} 

func reloadProgram(completion: (result:String)->()) { 
    defaults.setBool(false, forKey: "gotColl") 
    if defaults.arrayForKey("selectedArray") != nil { 
     let selArray = defaults.arrayForKey("selectedIDArray") as! [String] 
     Networking().getVideos(selArray) { (result:String) ->() in 
      defaults.setBool(true, forKey: "gotColl") 
     } 
    } 
    completion(result: "done") 
} 

誰かが私が間違っている可能性のあるアイデアはありますか?

ありがとうございました。

+0

あなたのメソッドを呼び出しますネットワーキングの範囲、ない? defaults.setBoolの直後、同じスコープ内にあります。 – Moritz

+0

は、segueがプログラムで実行されていないときにのみ機能します(performSegueWithIdentifier ...)、segueを呼び出す前にネットワーク操作を実行して終了したら、 – javiazo

+0

Eric、その完了はreloadprogram関数 –

答えて

2

PrepareForSegueは、戻るボタンから呼び出されません。これは、コントローラをプッシュ/プレゼンテーションするときにのみ呼び出されます。

ソリューションは、カスタムアクションを使用して独自の戻るボタンを追加することです:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:self action:@selector(backTapped:)]; 

、タップされたときだけ早くそれを見て、完成は内にある必要があります

-(void)backTapped:(id)sender { 
    reloadProgram() 
} 
+0

私のプリントステートメント、それは呼び出されています。問題は、ネットワーキング方法が完了するのを待っていないことです。 –

+0

[OK]をクリックすると、コントローラがgetVideosコンプリートハンドラで無効になります。 getVideosは非同期メソッドであるため、非ブロックであり、ビデオのダウンロードを待つことはありません。 – stefos

関連する問題